布尔值(boolean)

  1. let isDone : boolean = false;

数字(number)

所有数字是浮点数,浮点数的类型。支持二进制、八进制、十进制、十六进制

  1. let decLiteral : number = 6;
  2. let hexLiteral : number = 0xf00d;
  3. let binaryLiteral : number = 0b1010;
  4. let octalLiteral : number =0o744

字符串(string)

于JavaScript相同,可以使用单引号或者双引号,或者使用模板字符串``

  1. let name : string = "bob";
  2. let sentence : string = `my ${name}`

数组

  1. let list :number [] = [1,2,3];
  2. let list :Array<number> = [1,2,3]
  3. const arrayString: string[] = ["1", "2", "3", "4"]

元祖(Tuple)

元组类型表示一个已知元素数量和类型的数组

  1. const tuple: [string, number] = ["1", 1];
  2. console.log("tuple", tuple, tuple[0], tuple[1]);
  3. console.log("tuple[0]", tuple[0].substr(1))
  4. // 这个会被检测出来错误。
  5. // console.log("tuple[1]", tuple[1].substr(1))

枚举(enum)

  1. enum Color {Red, Green, Blue,}
  2. const color: Color = Color.Red;
  3. const colorName: string = Color[1]
  4. console.log("Color", Color); // {0:"Red",1:"Green",2:"Blue",Blue:2,Green:1,Red:0}
  5. console.log("color", color); // 0
  6. console.log("colorName", colorName); // Green

Any

不进行类型检查,直接通过编译阶段的检查

  1. let notSure :any=4
  2. let array : any=[1,2,3,4,5]
  3. const arrayAny: any[] = [1, "1", true, null, undefined];

Void

与any相反,表示没有任何类型,void类型的变量只能赋予undefined和null

  1. const unusable: void = undefined;
  2. function getName(): void {
  3. }

Null,Undefined

null和undefined是左右类型的子类型,默认可以把null和undefined复制给number类型的变量,

指定了—strictNullChecks标记,null,undefined只能赋值给void和他们各自。如果想要传入的变量是string、null、undefined、那么可以使用联合类型 string |null |undefined。

鼓励使用 —strictNullChecks

  1. const n: null = null;
  2. const u: undefined = undefined;

Never

表示永不存在的值的类型,例如,总会抛出异常或不会有返回值的函数表达式,箭头函数表达式的返回值类型。never类型的变量,被永不为真的类型保护所约束时。

返回never的函数必须存在无法达到的终点

  1. // Never表示永远不存在的值的类型
  2. function error(message: string): never {
  3. throw new Error(message)
  4. }
  5. function fail() {
  6. return error("Something failed")
  7. }
  8. function infiniteLoop(): never {
  9. while (true) {
  10. }
  11. }

Object

object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。

  1. // node_modules/typescript/lib/lib.es5.d.ts
  2. interface ObjectConstructor {
  3. create(o: object | null): any;
  4. // ...
  5. }
  6. const proto = {};
  7. Object.create(proto); // OK
  8. Object.create(null); // OK
  9. Object.create(undefined); // Error
  10. Object.create(1337); // Error
  11. Object.create(true); // Error
  12. Object.create("oops"); // Error

Object 类型:它是所有 Object 类的实例的类型,它由以下两个接口来定义:

Object 接口

  • Object 接口定义了 Object.prototype 原型对象上的属性;

    1. // node_modules/typescript/lib/lib.es5.d.ts
    2. interface Object {
    3. constructor: Function;
    4. toString(): string;
    5. toLocaleString(): string;
    6. valueOf(): Object;
    7. hasOwnProperty(v: PropertyKey): boolean;
    8. isPrototypeOf(v: Object): boolean;
    9. propertyIsEnumerable(v: PropertyKey): boolean;
    10. }

    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;

  1. Object 类的所有实例都继承了 Object 接口中的所有属性。
  2. <a name="og98h"></a>
  3. ### {} 类型
  4. {} 类型描述了一个没有成员的对象。当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误。
  5. ```typescript
  6. // Type {}
  7. const obj = {};
  8. // Error: Property 'prop' does not exist on type '{}'.
  9. obj.prop = "semlinker";

但是,你仍然可以使用在 Object 类型上定义的所有属性和方法,这些属性和方法可通过 JavaScript 的原型链隐式地使用:

  1. // Type {}
  2. const obj = {};
  3. // "[object Object]"
  4. obj.toString();

类型断言

自己已经清楚的知道一个实体具有比它现有类型更确切的类型

  1. let someValue:any = "this is string"
  2. let strLength : number = (<string>someValue).length;
  3. // 如果是ts文件 那么可以 (<string>someValue).length
  4. // tsx里面只能使用as
  5. let someValue: any = "this is a string";
  6. let strLength: number = (someValue as string).length;

类型断言用于将一个联合类型的变量指定为一个更加具体的类型;
类型断言不是类型转换,不允许断言成一个联合类型中不存在的类型