微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TypeScript不需要所有索引属性

如何解决TypeScript不需要所有索引属性

我有以下代码

type AZ = 'a'|'b'|'c'|'d'| ... |'z'; // union of many types

type Mapping = {
  [K in AZ]: string;
}

const obj: Mapping = { // error,missing properties 'c','d',etc.
  a: '',b: ''
};

这使我只能将obj的props限制为那些与union匹配的props,但是它迫使我列出所有props。如果我改为这样做:

type Mapping = {
  [K in AZ]?: string;
}

现在我不必提供每个道具,但是生成的道具类型包含undefined。我该如何表达我只想提供来自AZ的某些密钥,但是如果提供了它们,则不应提供undefined?换句话说,我想要:

const obj: Mapping = { // ok
  a: '',// checks 'a' as string
  b: ''   // checks 'b' as string
  bad: '' // error 'bad' not in AZ
  // no additional props needed
};

...而不必使用obj[prop]!之类的断言。

PS:这与https://github.com/microsoft/TypeScript/issues/13195有关系吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。