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语法断言。