【发布时间】:2019-08-03 20:41:18
【问题描述】:
在 TypeScript 中,有一个名为 Partial<T> 的预定义类型。它是这样定义的:
type Partial<T> = {
[P in keyof T]?: T[P];
}
显然,索引签名被标记为可选,这是可行的。如果我尝试做同样的事情:
interface IDictionary<T> {
[ key: string ]?: T
}
TypeScript 抱怨 ?。这是因为接口可能不包含可选字段,还是这是什么原因?
【问题讨论】:
-
Partial定义是一个映射类型,它说:“遍历所有成员并添加可选修饰符”。你想通过将索引签名标记为可选来实现什么? -
Mapped types 和 index signatures 看起来相似但并不相同。索引签名不能标记为可选,实际上总是被视为可选(在某种意义上,您不需要在匹配对象中拥有所有可能的索引键);没有办法说“必需”。我同意语法令人困惑并且可能具有误导性,但事实就是如此。
标签: javascript typescript