TypeScript具有默认定义的Partial
类型,因此您可以说Partial<{x: number, y: string}>
以获得类似{x?: number, y?: string}
的类型(该类型的属性变为可选)。定义为
type Partial<T> = {
[P in keyof T]?: T[P]
}
我正在尝试定义逆,我们将其称为Full<T>
,以确保对象中的所有属性都是必需的。我从一个明显的定义开始:
type Full<T> = {
[P in keyof T]: T[P]
}
已删除问号的只是Partial
。不幸的是,这不起作用-可选属性仍然是可选的。在某些情况下,打字稿似乎以某种方式保留了keyof
类型的属性名称的要求信息。
有趣的是,如果将该类型存储在中间类型名称中,则会删除该信息。即这有效:
type Config = {foo: number, bar?: string}
type ConfigKey = keyof Config
type FullConfig = {[K in ConfigKey]: Config[K]}
在FullConfig
(至少对于TypeScript 3.3)中,bar
是必需的。但是,如果将keyof Config
内联到FullConfig
的定义中,它又是可选的。
我希望这是一个单一的,易于使用的类型,并且由于我不知道用于定义本地类型的类型声明的方法,因此该技巧似乎并没有太大帮助。
我有什么想念的招吗?