约束方式
# 约束方式
字符串类型
let str: String = 'abcdef'
数字类型
let num: Number = 123;
布尔类型
let flag: Boolean = true;
数组
let arr: Array<number> = [1, 2, 3]; let brr: number[] = [1, 2, 3];
对象
let obj: object = {} // 可以使用这种方式约束但是不够精准。因为对象中存在其他属性
null 和 undefined
null 和 undefined 是其他类型的子类型
# 联合类型
多种类型选择其中一个
配合类型保护进行判断
类型保护:当一个类型进行类型判断后,在判断语句中可以确定变量的类型。
# void 类型
表示一个函数不返回任何东西。
一般不约束变量
# never 类型
表示该函数永远不会结束。
# 字面量类型
let sex: 'man' | 'woman';
// sex = 0 // 会提示只能是 man 或 woman 类型
# 元祖类型(Tuple)
一个固定长度的数组,并且数组中每一项都确定。
let tuple: [string, number]; // 表示 tuple 这个数组只能有两项 并且第一项是字符串,第二项是数组
tuple = ['1',2]
# any 类型
any 类型可以绕过类型检查,any 类型的数据可以赋值给任何类型。
# 类型别名
对一致的一些类型定义名称
type 类型名 = 值;
type gender = '男' | '女'
type User = {
name: string,
sex: gender,
age: number
}
let user: User = {
name: 'zhang san',
sex: '女',
age: 18,
}
# 函数相关约束
函数重载:在函数实现之前,对函数调用的多种情况进行声明
/**
* 约束 a b 同为数字类型
* @param a
* @param b
*/
function func(a: number, b: number): number;
/**
* 约束 a b 同为字符串类型
* @param a
* @param b
*/
function func(a: string, b: string): string;
function func(a, b): number | string {
if (typeof a === 'number' && typeof b === 'number') {
return a * b;
} else if (typeof a === 'string' && typeof b === 'string') {
return a + b;
}
throw new Error('a and b not number or string')
}
var ret = func(1, 2);
var rets = func('a', 'b');
可选参数:可以在某个参数名后面加上问号,表示该参数可以不用传递。
function test(a: number, b: number): number;
function test(a: number, b: number, c: string): string;
function test(a: number, b: number, c?: string): number | string {
if (c) {
return a + b + c;
} else {
return a + b;
}
}
var t1 = test(1, 2);
var t2 = test(1, 2, '3')