TypeScript 是 JS 的超集, TS 提供了 JS 的所有功能,并且额外的增加了: 类型系统。
作用:为变量添加类型约束。
比如 ,下列代码中, 约定变量name2的类型为 string(字符类型)。
约定了什么类型,就只能给变量赋值该类型的值,否则 ,就会报错。
数组类型的两种写法:(推荐使用 number[] 写法)
let arr: number[] = [1, 2, 3] // 推荐写法
let strArr:string[]=['1','2','3']
let str: Array = ['a', 'b', 'c'] // 不推荐
数组中既有 number 类型, 又有 string 类型
| (竖线)在 TS 中叫做联合类型 ( 由两个或多个其他类型组成的类型, 表示可以是这些类型中的任意一种 )。
let arr:(number|string)[]=[1,'sss']
let infoArr: (string | number | boolean | object)[] = ['zs', 19, true, { name: '张三' }];
type arrType = (string | number)[]
let arr: arrType = [1, 2, 3, 'a', 'b', 'c']
let infoArr: arrType = [18, '张三']
函数的类型实际上指的是: 函数参数和返回值的类型。
//参数类型, //返回值类型
function addTS(num1: number, num2: number): number {
return num1 + num2
}
//箭头函数类型
const addTsArrow = (msg1: string, msg2: string): string => {
return msg1 + msg2 + 'hello ts'
}
如果函数没有返回值,那么, 函数返回值类型为: void
function greet(msg: string): void {
console.log('没有返回值');
}
可选参数 :在可传可不传的参数名称后面添加 ? (问号)。
注意:可选参数只能出现在参数列表的最后,也就是说可选参数后面不能再出现必选参数。
function mySplice(start?: number, end?: number): void {
console.log(start);
console.log(end);
}
mySplice()
mySplice(1)
mySplice(1, 2)
// 默认参数
function requiredNum(num1: number = 10): number {
return num1 + 10
}
console.log(requiredNum())
console.log(requiredNum(20))
// ts 的对象类型
//方式一
let obj: { name: string; age: number; say: () => void } = {
name: '张三',
age: 25,
say: function () {
console.log('你好');
}
}
console.log(obj);
// 方式二
let obj2: {
name: string
age: number
say: () => void
} = {
name: '李四',
age: 22,
say() {
console.log('hi');
}
}
console.log(obj2);
对象的可选属性
//方式一
function myAxios1(config: { url: string; methods?: string }): void {
console.log(config);
}
//方式二
type options = { url: string; methods?: string }
function myAxios2(config: options): void {
console.log(config);
}
myAxios2({ url: 'http:www.abc.com' })
myAxios2({ url: 'http:www.abc.com', methods: 'post' })
当一个对象类型被多次使用时,一般会使用接口 ( interface)来描述对象的类型达到复用的目的。
interface (接口 )和 type (类型别名 )的对比:
相同点 :都可以给对象指定类型。
不同点:
interface IPerson {
// name: string; age: number; sayHi(): void;
name: string
age: number
sayHi: () => void
}
let obj: IPerson = {
name: 'zs',
age: 19,
sayHi() {
console.log('hello');
}
}
接口的继承(extends)
interface Point2D {
x: number
y: number
}
interface Point3D extends Point2D {
z: number
}
let pointB: Point3D = {
x: 100,
y: 200,
z: 300
}
元组类型可以确切地标记出有多少个元素,以及每个元素的类型。
let position: [number, number, string] = [39.5427, 116.2317, 'China']
let position2: [number, number, string?] = [39.5427, 116.2317]