TypeScript文档类型:
类型推论
联合类型
类型断言
类型守卫

类型推论

:::warning TypeScript会在没有明确指定类型的时候,推测出当前变量的类型。 :::

  1. let str = 'str'
  2. // let str: string , ts会推论出它是string

联合类型

:::warning 我们之前讲过any类型,这个类型是大而全的一种类型,涵盖所有类型。
如果我们不希望范围这么广泛,只包含我们指定的类型,就叫联合类型 :::

示例

  1. let numberOrString: number|string
  2. numberOrString = 'abc'
  3. numberOrString = 123
  4. // 当TS不确定一个联合类型的变量到底是那个类型的时候,
  5. // 我们只能访问到这个联合类型的多有类型里共有的属性或方法。
  6. // 如: toLocaleString, toString, valueOf。
  7. // 像 length这种本身strubg有的方法就没办法使用了。
  8. let numberOrString: number|string
  9. numberOrString.length // 类型“number”上不存在属性“length”

类型断言

:::warning 有时候我们使用了联合类型,但又确实需要在不确定类型的情况下使用某个类型特有的方法。
那么就要使用类型断言 as , 告诉编译器你更懂这个类型,并且不应该发出错误。 :::

实例

  1. function getLength(input:string | number): number {
  2. // 这段代码的意思是,我就要把它看作string类型,
  3. // 要求ts可以访问string的方法
  4. // 但如果他不是真的string,那么也不会报错,只是没有length这个属性而已。
  5. const str = input as string;
  6. if (str.length){
  7. return str.length
  8. } else {
  9. // 来到这里就会把它看作number类型。
  10. const number = input as number
  11. return number.toString().length;
  12. }
  13. }

类型守卫

:::warning 当遇到一个联合类型的时候,使用条件语句,它可以自动缩小类型的范围。 ::: :::danger 其实类型守卫只不过是使用条件语句罢了,ts会只能的帮我们去做这个范围缩小和判断。 :::

实例

  1. // 使用类型断言
  2. function getLength(input:string | number): number {
  3. // 这段代码的意思是,我就要把它看作string类型,
  4. // 要求ts可以访问string的方法
  5. // 但如果他不是真的string,那么也不会报错,只是没有length这个属性而已。
  6. const str = input as string;
  7. if (str.length){
  8. return str.length
  9. } else {
  10. // 来到这里就会把它看作number类型。
  11. const number = input as number
  12. return number.toString().length;
  13. }
  14. }
  15. // 使用类型守卫
  16. function getLength2(input:string | number): number {
  17. if (typeof input === 'string'){
  18. return input.length
  19. } else {
  20. return input.toString().length
  21. }
  22. }