布尔值

用boolean表示

  1. let flag: boolean = false

数字

和Javascript一样, typescript 里的数字都是浮点数, 都可以用number来表示, 并且支持二, 八, 十, 十六进制字面量

  1. let binary: number = 0b10101 // 二进制 --> 21
  2. let octal: number = 0o17 // 八进制 --> 15
  3. let dec: number = 1290 // 十进制
  4. let hex: number = 0xa1 // 十六进制 --> 161

字符串

单引号' 或 双引号" 或 反引号 ``` 表示

  1. let firstName: string = 'Jay'
  2. let lastName: string = 'Chou'
  3. let fullName: string = `${firstName} ${lastName}`

数组

在类型后面加上 [] 或者使用数组泛型 Array<Type>

  1. let list: number[] = [0, 1, 2, 3, 4]
  2. let gen: Array<string> = ['Jay', 'Kylie', 'Tom']

元组 Tuple

表示一个数组, 它的元素类型和数量已知, 并且元素类型存在顺序关系

  1. let jay: [string, number]
  2. jay = ['Jay', 18]
  3. jay = [18, 'Jay'] // 报错

但你访问或赋值越界元素时, 会使用联合类型

  1. jay[3] = 'male' // 'male' 字符串可以赋值给(string | number)联合类型
  2. jay[4].toString() // 不报错, string和number都有toString方法
  3. jay[5] = false // 报错, boolean不是(string | number)联合类型

—- ts 3.1之后的版本访问越界元素会直接报错

枚举 enum

对 JavaScript 标准数据类型的一个补充

  1. enum Color {Red, Green, Blue}
  2. let c: Color = Color.Green
  3. // 默认情况下,从 0 开始为元素编号。 你也可以手动的指定成员的数值
  4. enum Color {Red = 1, Green, Blue}
  5. let c: Color = Color.Green
  6. // 或者,全部都采用手动赋值
  7. enum Color {Red = 1, Green, Blue}
  8. let colorName: string = Color[2]
  9. console.log(colorName) // 显示'Green'因为上面代码里它的值是2

unknown

我们可能需要描述我们在编写应用程序时不知道的变量类型。这些值可能来自动态内容—例如来自用户—或者我们可能希望有意接受我们的API中的所有值。在这些情况下,我们希望提供一个类型,告诉编译器和未来的读者,这个变量可能是任何东西,所以我们给它 unknown 类型。TypeScript 3.0中引入 unknown 类型

  1. let notSure: unknown = 4;
  2. notSure = "maybe a string instead";
  3. // OK, definitely a boolean
  4. notSure = false;

如果你有一个未知类型的变量,你可以通过做typeof检查、比较检查或者更高级的类型防护来缩小它的范围

  1. declare const maybe: unknown;
  2. // 'maybe' could be a string, object, boolean, undefined, or other types
  3. const aNumber: number = maybe;
  4. Type 'unknown' is not assignable to type 'number'.
  5. if (maybe === true) {
  6. // TypeScript knows that maybe is a boolean now
  7. const aBoolean: boolean = maybe;
  8. // So, it cannot be a string
  9. const aString: string = maybe;
  10. Type 'boolean' is not assignable to type 'string'.
  11. }
  12. if (typeof maybe === "string") {
  13. // TypeScript knows that maybe is a string
  14. const aString: string = maybe;
  15. // So, it cannot be a boolean
  16. const aBoolean: boolean = maybe;
  17. Type 'string' is not assignable to type 'boolean'.

any

有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。

  1. let list: any[] = [1, true, 'free']
  2. list[1] = 100

void

它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是 void

  1. function warnUser(): void {
  2. console.log('This is my warning message')
  3. }
  4. // 声明一个 void 类型的变量没有什么大用,因为你只能为它赋予 undefined 和 null
  5. let unusable: void = undefined

null 和 undefined

undefinednull 两者各自有自己的类型分别叫做 undefinednull。 和 void 相似,它们的本身的类型用处不是很大
默认情况下 nullundefined 是所有类型的子类型。 就是说你可以把 nullundefined 赋值给 number 类型的变量。
然而,当你指定了 --strictNullChecks 标记,nullundefined 只能赋值给 void 和它们各自,这能避免 很多常见的问题。 也许在某处你想传入一个 stringnullundefined,你可以使用联合类型 string | null | undefined

  1. let u: undefined = undefined
  2. let n: null = null
  1. tsc xxx.ts --strictNullChecks

never

never 类型表示的是那些永不存在的值的类型。 例如, never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never 类型,当它们被永不为真的类型保护所约束时。
never 类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是 never 的子类型或可以赋值给never 类型(除了 never 本身之外)。 即使 any 也不可以赋值给 never

  1. // 返回never的函数必须存在无法达到的终点
  2. function error(message: string): never {
  3. throw new Error(message)
  4. }
  5. // 推断的返回值类型为never
  6. function fail() {
  7. return error("Something failed")
  8. }
  9. // 返回never的函数必须存在无法达到的终点
  10. function infiniteLoop(): never {
  11. while (true) {
  12. }
  13. }

object

object 表示非原始类型,也就是除 numberstringbooleansymbolnullundefined 之外的类型。
使用 object 类型,就可以更好的表示像 Object.create 这样的 API

  1. declare function create(o: object | null): void
  2. create({ prop: 0 }) // OK
  3. create(null) // OK
  4. create(42) // Error
  5. create('string') // Error
  6. create(false) // Error
  7. create(undefined) // Error