关于使用as any localCompare类型断言的疑问
来源:9-3 【泛型函数重载应用准备】经典复杂排序器的实现 1

Loogeek
2021-09-06
1. 老师这里泛型是不是应该写Array或者直接用string更好呢?因为会用到字符串的localeCompare方法,如果传入的元素不是字符串,那运行时方法应该是会报错的,看下面是调用这个方法前通过isChinese做了类型保护判断,如果其他调用方法没有做类型保护到运行时就出错了,感觉写as any就没办法做类型检查了
2回答
-
// 最佳答案: 这样写:为什么呢?主要考虑 第S100行 这样有限制的字符串数组
// 尽管直接改写成string 也可以,但下面写法是最佳推荐写法 ,老师把这个作为思考题留给你,如果实在想不出来再在问答区提问
function sortChinese<T extends string>(arr: Array<T>): T[] {//Array<T>=T[]
return arr.sort(function (firstnum, secondnum) {
return (firstnum as any).localeCompare(secondnum, "zh-CN")
})
}
// S100 一些底层,如路由器底层泛型,用到了这种限制数据个数的值类型数组
type pathValueType = "searchFood" | ":foodname" | ":price"
let arr: Array<pathValueType> = ["searchFood", ":foodname"]
let result100 = sortChinese<pathValueType>(arr) //S101
// 不能将类型“"abc"”分配给类型“pathValueType”
let arr2: Array<pathValueType> = ["searchFood", ":foodname","abc"]
022021-09-07 -
keviny79
2021-09-06
参加截图
00
相似问题