我有以下代码:
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有关吗?