布尔值(boolean)
let isDone : boolean = false;
数字(number)
所有数字是浮点数,浮点数的类型。支持二进制、八进制、十进制、十六进制
let decLiteral : number = 6;let hexLiteral : number = 0xf00d;let binaryLiteral : number = 0b1010;let octalLiteral : number =0o744
字符串(string)
于JavaScript相同,可以使用单引号或者双引号,或者使用模板字符串``
let name : string = "bob";let sentence : string = `my ${name}`
数组
let list :number [] = [1,2,3];let list :Array<number> = [1,2,3]const arrayString: string[] = ["1", "2", "3", "4"]
元祖(Tuple)
元组类型表示一个已知元素数量和类型的数组
const tuple: [string, number] = ["1", 1];console.log("tuple", tuple, tuple[0], tuple[1]);console.log("tuple[0]", tuple[0].substr(1))// 这个会被检测出来错误。// console.log("tuple[1]", tuple[1].substr(1))
枚举(enum)
enum Color {Red, Green, Blue,}const color: Color = Color.Red;const colorName: string = Color[1]console.log("Color", Color); // {0:"Red",1:"Green",2:"Blue",Blue:2,Green:1,Red:0}console.log("color", color); // 0console.log("colorName", colorName); // Green
Any
不进行类型检查,直接通过编译阶段的检查
let notSure :any=4let array : any=[1,2,3,4,5]const arrayAny: any[] = [1, "1", true, null, undefined];
Void
与any相反,表示没有任何类型,void类型的变量只能赋予undefined和null
const unusable: void = undefined;function getName(): void {}
Null,Undefined
null和undefined是左右类型的子类型,默认可以把null和undefined复制给number类型的变量,
指定了—strictNullChecks标记,null,undefined只能赋值给void和他们各自。如果想要传入的变量是string、null、undefined、那么可以使用联合类型 string |null |undefined。
鼓励使用 —strictNullChecks
const n: null = null;const u: undefined = undefined;
Never
表示永不存在的值的类型,例如,总会抛出异常或不会有返回值的函数表达式,箭头函数表达式的返回值类型。never类型的变量,被永不为真的类型保护所约束时。
返回never的函数必须存在无法达到的终点
// Never表示永远不存在的值的类型function error(message: string): never {throw new Error(message)}function fail() {return error("Something failed")}function infiniteLoop(): never {while (true) {}}
Object
object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
// node_modules/typescript/lib/lib.es5.d.tsinterface ObjectConstructor {create(o: object | null): any;// ...}const proto = {};Object.create(proto); // OKObject.create(null); // OKObject.create(undefined); // ErrorObject.create(1337); // ErrorObject.create(true); // ErrorObject.create("oops"); // Error
Object 类型:它是所有 Object 类的实例的类型,它由以下两个接口来定义:
Object 接口
Object 接口定义了 Object.prototype 原型对象上的属性;
// node_modules/typescript/lib/lib.es5.d.tsinterface Object {constructor: Function;toString(): string;toLocaleString(): string;valueOf(): Object;hasOwnProperty(v: PropertyKey): boolean;isPrototypeOf(v: Object): boolean;propertyIsEnumerable(v: PropertyKey): boolean;}
ObjectConstructor 接口
ObjectConstructor 接口定义了 Object 类的属性。
``typescript // node_modules/typescript/lib/lib.es5.d.ts interface ObjectConstructor { /** Invocation vianew` / new(value?: any): Object; /** Invocation via function calls / (value?: any): any; readonly prototype: Object; getPrototypeOf(o: any): any; // ··· }
declare var Object: ObjectConstructor;
Object 类的所有实例都继承了 Object 接口中的所有属性。<a name="og98h"></a>### {} 类型{} 类型描述了一个没有成员的对象。当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误。```typescript// Type {}const obj = {};// Error: Property 'prop' does not exist on type '{}'.obj.prop = "semlinker";
但是,你仍然可以使用在 Object 类型上定义的所有属性和方法,这些属性和方法可通过 JavaScript 的原型链隐式地使用:
// Type {}const obj = {};// "[object Object]"obj.toString();
类型断言
自己已经清楚的知道一个实体具有比它现有类型更确切的类型
let someValue:any = "this is string"let strLength : number = (<string>someValue).length;// 如果是ts文件 那么可以 (<string>someValue).length// tsx里面只能使用aslet someValue: any = "this is a string";let strLength: number = (someValue as string).length;
类型断言用于将一个联合类型的变量指定为一个更加具体的类型;
类型断言不是类型转换,不允许断言成一个联合类型中不存在的类型
