使用TypeScrip定义数组时,如果数组内元素的类型不同,那么数组的类型会识别为联合类型数组,例如:
let numberFunc = () => 1; // numberFunc 的返回类型为 number
let strFunc = () => 'a'; // strFunc 的返回类型为 string
let foobar = [numberFunc(), strFunc()]; //foobar的类型为 (string | number)[]
有时候我们需要保持数组内的类型顺序,特别是在解构时,这时候就会出现问题
let numberFunc = () => 1; // numberFunc 的返回类型为 number
let strFunc = () => 'a'; // strFunc 的返回类型为 string
let foobar = [numberFunc(), strFunc()]; //foobar的类型为 (string | number)[]
let [foo, bar] = foobar; // foo、bar的类型均为 string | number
我们想要的类型结果是foo: number, bar: string
为了保持类型顺序,在定义数组时加上<const>
即可
let numberFunc = () => 1; // numberFunc 的返回类型为 number
let strFunc = () => 'a'; // strFunc 的返回类型为 string
let foobar = <const>[numberFunc(), strFunc()]; //foobar的类型为 [number, string]
let [foo, bar] = foobar; // foo: number, bar: string
这种方法也可以用在函数返回值上,写React Hook时比较有用