在 TypeScript 进行类型定义的时候尽量不使用 Object、Boolean、Array、Function 等大写开头的标识来定义类型,因为它们在 JavaScript 中都是具体的函数对象,取而代之地应该使用 object、boolean、[]、() => void。
一个保存字符串的文本,类型声明为 string。
let name: string = 'muyy'
boolean 是 true 或 false 的值,所以 let isBool3: boolean = new Boolean(1)
就会编译报错,因为 new Boolean(1) 生成的是一个 Bool 对象。
let isBool1: boolean = false
let number: number = 10;
数组是 Array 类型。然而,因为数组是一个集合,我们还需要指定在数组中的元素的类型。我们通过 Array<type>
or type[]
语法为数组内的元素指定类型。
let arr: number[] = [1, 2, 3, 4, 5]let arr2: Array<number> = [1, 2, 3, 4, 5]let arr3: string[] = ["1","2"]let arr4: Array<string> = ["1","2"]
Tuple 类型相对于 Array 类型, 其允许元素的类型不一定相同。
let x: [string, number]x = ['a', 1]
列出所有可用值,一个枚举的默认初始值是 0。一开始的范围可以作如下调整:
enum Role {Employee = 3, Manager, Admin}let role: Role = Role.Employeeconsole.log(role) // 3console.log(Role[4]) // Manager
any 是默认的类型,其类型的变量允许任何类型的值:
let notSure:any = 10let notSure2:any[] = [1,"2",false]
JavaScript 没有空值 void 的概念,在 TypeScirpt 中,可以用 void 表示没有任何返回值的函数:
function alertName(): void {console.log('My name is muyy')}
此外,需注意的是如果在函数声明的变量后方声明 () => void,函数中是可以返回任意值,只不过结果类型仍然为 void。
✅const f1: () => void = function() {return true}❎const f3 = function(): void {return true}
任何使用 any 类型的地方推荐使用 unknow 类型代替它。
new-unknown-top-type, 比 any 更加安全的类型
如果没有断言或缩小到更具体的类型,则不允许对 unknow 类型做任何操作。比如下方例子:
function f(x: unknown) {x == 5;x !== 10;x >= 0; // Errorx + 1; // Errorx * 2; // Error-x; // Error+x; // Errorx.foo; // Errorx[5]; // Errorx(); // Error}
当函数 throw 或者返回错误, 循环永远为 true 时可以声明为 never 类型。
// Function returning never must have unreachable end pointfunction error(message: string): never {throw new Error(message)}// Inferred return type is neverfunction fail() {return error("Something failed")}// Function returning never must have unreachable end pointfunction infiniteLoop(): never {while (true) { ... }}