首页 > 解决方案 > 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: ''
};

这让我将 props 限制obj为仅与 union 匹配的那些,但它迫使我将它们全部列出。如果我这样做:

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有关吗?

标签: typescriptunion-typesindexed-properties

解决方案


推荐阅读