请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于使用as any localCompare类型断言的疑问

图片描述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"]


0 回复 有任何疑惑可以回复我~
  • 提问者 Loogeek #1
    嗯,改成T extends string可以,那这样(firstnum as any)感觉就没必要了
    回复 有任何疑惑可以回复我~ 2021-09-07 10:49:32
  • keviny79 回复 提问者 Loogeek #2
    我忘记删除了 as any ,你把鼠标放到S101行 上既可以看出  直接用 string 和 T extends string 的区别 ,T  extends string 更直观展示pathValueType当前类型
    回复 有任何疑惑可以回复我~ 2021-09-07 16:19:45
keviny79 2021-09-06 19:57:55

https://img1.sycdn.imooc.com//szimg/613602330809667811310494.jpg

参加截图

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信