直接上代码:

  1. // 原始类型
  2. let bool: boolean = true
  3. let num: number = 123
  4. let str: string = 'abc'
  5. // str = 123
  6. // 数组
  7. let arr1: number[] = [1, 2, 3]
  8. let arr2: Array<number> = [1, 2, 3]
  9. //数组,联合类型
  10. let arr3: Array<number | string> = [1, 2, 3, '4']
  11. // 元组,无法进行修改。可是使用push方法,但还是无法进行越界访问(不推荐使用push)
  12. let tuple: [number, string, string] = [0, '1', '2']
  13. // tuple.push(2)
  14. // console.log(tuple)
  15. // tuple[2]
  16. // 函数
  17. let add = (x: number, y: number) => x + y
  18. let compute: (x: number, y: number) => number
  19. compute = (a, b) => a + b
  20. // 对象
  21. let obj: { x: number, y: number } = { x: 1, y: 2 }
  22. obj.x = 3
  23. // symbol(具有唯一的值),常用于常量定义
  24. let s1: symbol = Symbol()
  25. let s2 = Symbol()
  26. // console.log(s1 === s2) false
  27. // undefined, null
  28. let un: undefined = undefined
  29. let nu: null = null
  30. /**
  31. * 如果要让undefined, null可以赋值给普通变量,
  32. * 那么需要设置tsconfig中, strictNullChecks为false
  33. */
  34. // num = undefined
  35. // num = null
  36. // void(可指没有任何返回值的函数)
  37. let noReturn = () => {}
  38. // any,可以任意进行赋值
  39. let x
  40. x = 1
  41. x = []
  42. x = () => {}
  43. // never ,抛出错误,或者死循环
  44. let error = () => {
  45. throw new Error('error')
  46. }
  47. let endless = () => {
  48. while(true) {}
  49. }
  50. 枚举:
  51. //枚举在运行环境中,其实是一个对象
  52. // 数字枚举
  53. enum Role {
  54. Reporter = 1,
  55. Developer,
  56. Maintainer,
  57. Owner,
  58. Guest
  59. }
  60. // console.log(Role.Reporter)
  61. // console.log(Role)
  62. // 字符串枚举
  63. enum Message {
  64. Success = '恭喜你,成功了',
  65. Fail = '抱歉,失败了'
  66. }
  67. // 异构枚举,数字和字符串枚举混用(不建议使用)
  68. enum Answer {
  69. N,
  70. Y = 'Yes'
  71. }
  72. // 枚举成员
  73. // Role.Reporter = 0,枚举被定以后不能被修改
  74. enum Char {
  75. // const member
  76. a, //普通数字
  77. b = Char.a,//对已有枚举的引用
  78. c = 1 + 3,//常量表达式
  79. // computed member,以下两个会被保留到执行阶段进行计算
  80. d = Math.random(),
  81. e = '123'.length,
  82. f = 4
  83. }
  84. // 常量枚举,编译后会被移除,自动替换使用变量为具体值
  85. const enum Month {
  86. Jan,
  87. Feb,
  88. Mar,
  89. Apr = Month.Mar + 1,
  90. // May = () => 5
  91. }
  92. let month = [Month.Jan, Month.Feb, Month.Mar]
  93. // 枚举类型
  94. enum E { a, b }
  95. enum F { a = 0, b = 1 }
  96. enum G { a = 'apple', b = 'banana' }
  97. //相同枚举类型成员才可以进行比较,否则不允许进行比较
  98. let e: E = 3
  99. let f: F = 3
  100. // console.log(e === f)
  101. let e1: E.a = 3
  102. let e2: E.b = 3
  103. let e3: E.a = 3
  104. // console.log(e1 === e2)
  105. // console.log(e1 === e3)
  106. //字符串枚举,其值只能为枚举类型值
  107. let g1: G = G.a
  108. let g2: G.a = G.a

基础类型:

  1. let isDone: boolean = false;
  2. let decLiteral: number = 6;
  3. let name: string = "bob";
  4. let list: number[] = [1, 2, 3];
  5. let list: Array<number> = [1, 2, 3];

模板字符串

  1. let sentence: string = `Hello, my name is ${ name }.
  2. I'll be ${ age + 1 } years old next month.`;

元祖Tuple:

  1. let x: [string, number];
  2. x = ['hello', 10]; // OK
  3. x = [10, 'hello']; // Error

越界时,联合类型进行替代(凡是元祖内的类型都可进行存储)

  1. x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型
  2. console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString
  3. x[6] = true; // Error, 布尔不是(string | number)类型

枚举

  1. enum Color {Red, Green, Blue}
  2. let c: Color = Color.Green;

默认枚举值按0开始,也可以手动指定

  1. enum Color {Red = 1, Green = 2, Blue = 4}
  2. let c: Color = Color.Green;
  3. //可以类似数组,直接进行访问
  4. let colorName: string = Color[2];

Any类型

  1. let notSure: any = 4;
  2. notSure = "maybe a string instead";

可以接受任何类型

Void

  1. let unusable: void = undefined;

Void只能被赋予undefined和null

Null和Underfined

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

默认情况下null和undefined是所有类型的子类型,可以把 null和undefined赋值给number类型的变量

当你指定了—strictNullChecks标记,null和undefined只能赋值给void和它们各自,也许在某处你想传入一个 string或null或undefined,你可以使用联合类型string | null | undefined

Nerver

never类型表示的是那些永不存在的值的类型

never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never

Object

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

类型断言

类型断言好比其它语言里的类型转换
方法一:

  1. let someValue: any = "this is a string";
  2. let strLength: number = (<string>someValue).length;

方法二:

  1. let someValue: any = "this is a string";
  2. let strLength: number = (someValue as string).length;