基础类型
let isDone: boolean = falselet num: number = 2// num = '2' 报错let str: string = 'bob'str = 'smith'let list: number[] = [1, 23, 45]let arrayList: Array<number> = [1, 2, 2, 3]
元祖 Tuple
元祖类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。
let x: [string, number]x = ['hello', 10] //ok// x = [10,'str'] //不能将类型“string”分配给类型“number”console.log(x[0].substr(1));//ello// console.log(x[1].substr(1)); //类型“number”上不存在属性“substr”// 当访问一个越界元素,会使用联合类型替代// x[3] = 'world'// x[4].toString()
枚举
是对JavaScript标准数据类型的一个补充
enum Color { Red, Green, Blue }let c: Color = Color.Green // 1// 默认情况下从0开始为元素编号,也可以手动指定成员的数值enum Colors { Red = 1, Green, Blue }let colorName: string = Colors[2]console.log(colorName); //Green
Any
编程阶段不清楚类型,可用any
let notSure: any = 4notSure = 'str'notSure = falsenotSure = 2notSure.toFixed() //toFixed存在 不报错let obj: Object = 4// obj.toFixed() //类型“对象”上不存在属性“ toFixed”
Void
与any相反,便是没有任何类型,当一个函数没有返回值的时候常见
function warnUser(): void {console.log('this is my warning message');}// 声明一盒void类型没有什么大用,因为他只能赋予 undefined 和 nulllet unusable: void = undefined
Object
declare function create(o: object | null): voidcreate({prop:0})create(null)// create(1) error// create('1') error// create(undefined) error
类型断言
通常这会发生在你清楚地知道一个实体具有比它现有类型更确切的类型
let someValue: any = "this is a string";let strLength: number = (<string>someValue).length;{let someValue: any = "this is a string";let strLength: number = (someValue as string).length;}
联合类型
let someValue: number | string;
Null Undefinde
TypeScript里,
undefined和null两者各自有自己的类型分别叫做undefined和null。 和void相似,它们的本身的类型用处不是很大。Never
表示那些永不存在的值的类型
- 例如,
never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; - 变量也可能是
never类型,当它们被永不为真的类型保护所约束时。function error(message: string): never {throw new Error(message);}// 推断的返回值类型为neverfunction fail() {return error("Something failed");}// 返回never的函数必须存在无法达到的终点function infiniteLoop(): never {while (true) {}}
