TypeScript文档类型:
类型推论
联合类型
类型断言
类型守卫
类型推论
:::warning TypeScript会在没有明确指定类型的时候,推测出当前变量的类型。 :::
let str = 'str'// let str: string , ts会推论出它是string
联合类型
:::warning
我们之前讲过any类型,这个类型是大而全的一种类型,涵盖所有类型。
如果我们不希望范围这么广泛,只包含我们指定的类型,就叫联合类型
:::
示例
let numberOrString: number|stringnumberOrString = 'abc'numberOrString = 123// 当TS不确定一个联合类型的变量到底是那个类型的时候,// 我们只能访问到这个联合类型的多有类型里共有的属性或方法。// 如: toLocaleString, toString, valueOf。// 像 length这种本身strubg有的方法就没办法使用了。let numberOrString: number|stringnumberOrString.length // 类型“number”上不存在属性“length”
类型断言
:::warning
有时候我们使用了联合类型,但又确实需要在不确定类型的情况下使用某个类型特有的方法。
那么就要使用类型断言 as , 告诉编译器你更懂这个类型,并且不应该发出错误。
:::
实例
function getLength(input:string | number): number {// 这段代码的意思是,我就要把它看作string类型,// 要求ts可以访问string的方法// 但如果他不是真的string,那么也不会报错,只是没有length这个属性而已。const str = input as string;if (str.length){return str.length} else {// 来到这里就会把它看作number类型。const number = input as numberreturn number.toString().length;}}
类型守卫
:::warning 当遇到一个联合类型的时候,使用条件语句,它可以自动缩小类型的范围。 ::: :::danger 其实类型守卫只不过是使用条件语句罢了,ts会只能的帮我们去做这个范围缩小和判断。 :::
实例
// 使用类型断言function getLength(input:string | number): number {// 这段代码的意思是,我就要把它看作string类型,// 要求ts可以访问string的方法// 但如果他不是真的string,那么也不会报错,只是没有length这个属性而已。const str = input as string;if (str.length){return str.length} else {// 来到这里就会把它看作number类型。const number = input as numberreturn number.toString().length;}}// 使用类型守卫function getLength2(input:string | number): number {if (typeof input === 'string'){return input.length} else {return input.toString().length}}
