H5W3
当前位置:H5W3 > 其他技术问题 > 正文

【前端问题精选】请问 typescript 里为何这里类型变成了 never?

interface Test {
  imgNumberPerWork: number
  displayCover: boolean
}

const test: Test = {
  imgNumberPerWork: 0,
  displayCover: true
}

function setValue (key: keyof Test, val: any) {
  test[key] = val
}

setValue('imgNumberPerWork', 1)

函数 setValue 里的 test[key] 报错了,不能将类型“any”分配给类型“never”。请问如何理解这里呢?

回答:

因为interface Test有两种类型的值,所以函数setValue的参数val有可能是number或者boolean,那么此时无法判断key和value的类型是否匹配。

回答:

test[key] 需要既是 number ,又是 boolean ,于是就 never 了。

可以这样

function setValue<T extends keyof Test> (key: T, val: Test[T]) {
  test[key] = val
}

回答:

interface Test {
  imgNumberPerWork: number;
  displayCover: boolean;
  [propName: string]: any; // 加这一行就好了
}

本文地址:H5W3 » 【前端问题精选】请问 typescript 里为何这里类型变成了 never?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址