C#码农学TypeScript(2)——基础类型
学习每种语言,最开始都是类型。
下面做个表格,比较直观看一看。
名称 | 表示 | 取值 | 举例 | 备注 |
布尔值 | boolean | true/false | let isDone: boolean = false; | |
数字 | number | 十进制、十六进制、二进制、八进制 | let decLiteral: number = 6; let hexLiteral: number = 0xf00d; let binaryLiteral: number = 0b1010; let octalLiteral: number = 0o744; | TS里所有数字都是浮点数 |
字符串 | string | 双引号 "" 单引号 ‘‘ 模板字符串 `` | let name: string = "bob"; let name: string = `Gene`; let sentence: string = `Hello, my name is ${ name }. `; | |
数组 | 元素类型后加 [] 数组泛型 Array<元素类型> | let list: number[] = [1, 2, 3]; let list: Array<number> = [1, 2, 3]; | ||
元组Tuple | let x: [string, number]; // Declare a tuple type x = [‘hello‘, 10]; // Initialize it, OK x = [10, ‘hello‘]; // Initialize it incorrectly, Error | 表示一个已知元素数量和类型的数组,各元素的类型不必相同。 | ||
枚举 | enum | enum Color {Red = 1, Green, Blue} let colorName: string = Color[2]; alert(colorName); // 显示‘Green‘因为上面代码里它的值是2 | 为一组数值赋予友好的名字。 默认从0开始编号,可以手动赋值。 可以由数值取到它的名字。 | |
任意值 | any | 任意值 | 不清楚类型,不希望类型检查器对它检查,直接通过编译。 let notSure: any = 4; notSure = "maybe a string instead"; notSure = false; // okay, definitely a boolean 你可能认为 let notSure: any = 4; notSure.ifItExists(); // okay, ifItExists might exist at runtime notSure.toFixed(); // okay, toFixed exists (but the compiler doesn‘t check) let prettySure: Object = 4; prettySure.toFixed(); // Error: Property ‘toFixed‘ doesn‘t exist on type ‘Object‘. 当你只知道一部分数据的类型时, let list: any[] = [1, true, "free"]; list[1] = 100; | |
空值 | void | 函数无返回值: function warnUser(): void { alert("This is my warning message"); } 声明一个 let unusable: void = undefined; | 表示不是任何类型 | |
Null和Undefined | null和undefined | null和undefined | // Not much else we can assign to these variables! let u: undefined = undefined; let n: null = null; 默认情况下 有例外,指定--strictNullChecks标记时,只能赋值给void和它们各自。 | |
Never | never | never |
// 返回never的函数必须存在无法达到的终点 function error(message: string): never { throw new Error(message); } // 推断的返回值类型为never function fail() { return error("Something failed"); } // 返回never的函数必须存在无法达到的终点 function infiniteLoop(): never { while (true) { } }
| 表示永不存在的值的类型。 |
类型断言
类似C#类型转换。
没有运行时的影响,只在编译阶段起作用。使用类型断言,相当于告诉编译器“相信我,我知道自己在干什么,它就是这个类型,我比你清楚。”
有两种语法形式,等价,凭个人喜好。
尖括号语法:
let someValue: any = "this is a string"; let strLength: number = (<string>someValue).length;
as语法:
let someValue: any = "this is a string"; let strLength: number = (someValue as string).length;
JSX只能用as语法断言。