TypeScript类型化数组sort后类型丢失,求更便捷解决方法
解决TypeScript数组sort后丢失类型的便捷方法
TypeScript默认会把字面量数组推断为string[],而sort()方法返回的类型与原数组一致,因此直接调用sort()后得到的string[]无法赋值给Fruit[]。以下是几种更便捷的解决方式:
1. 直接类型断言
既然明确数组元素都是Fruit类型,可直接将sort()结果断言为Fruit[],写法最简洁:
type Fruit = 'apple' | 'orange' | 'pineapple' const initialFruits: Fruit[] = ['pineapple', 'apple', 'orange'].sort() as Fruit[];
2. 用as const断言整个数组后转可变数组
通过as const让TypeScript推断出精确的字面量联合类型,再用扩展运算符转成可变数组(as const会生成只读数组,无法直接调用sort()),最终sort()后的类型会自动匹配Fruit[]:
type Fruit = 'apple' | 'orange' | 'pineapple' const initialFruits: Fruit[] = [...['pineapple', 'apple', 'orange'] as const].sort();
3. 封装排序工具函数
若需多次对Fruit数组排序,可封装专用函数避免重复断言:
type Fruit = 'apple' | 'orange' | 'pineapple' const sortFruits = (fruits: Fruit[]) => fruits.sort(); const initialFruits: Fruit[] = sortFruits(['pineapple', 'apple', 'orange']);
内容的提问来源于stack exchange,提问作者Alexey Zalyotov
相关产品推荐
相关产品推荐

