首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“缩小类型”中的“TypeScript类型保护”不改为“键类型”?

为什么“缩小类型”中的“TypeScript类型保护”不改为“键类型”?
EN

Stack Overflow用户
提问于 2020-01-07 12:20:23
回答 1查看 1.2K关注 0票数 7

请考虑以下代码:

代码语言:javascript
复制
const obj = {
    a: 1,
    b: 2
}

let possibleKey: string = 'a'

if (possibleKey in obj) console.log(obj[possibleKey])

possibleKey in obj为真时,我们知道possibleKeykeyof typeof obj类型,对吗?为什么TypeScript类型系统不能检测到这一点,并将string缩小到该类型?相反,它说:

代码语言:javascript
复制
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ a: number; b: number; }'.
EN

回答 1

Stack Overflow用户

发布于 2020-01-07 12:27:46

医生们

对于n in x表达式,其中n是字符串文本或字符串文本类型,x是联合类型,“true”分支缩小到具有可选或必需属性n的类型,而“false”分支缩小到具有可选或缺少属性n的类型。

换句话说,n in x缩小了x,而不是n,并且只针对字符串文本类型或字符串文本类型in联合类型。要使该表达式工作,您必须向编译器提供更多信息,例如使用https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions

代码语言:javascript
复制
if (possibleKey in obj) {
  console.log(obj[<keyof typeof obj>possibleKey]);
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59628330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档