是否可以创建类型约束,以便类型包含对象的非可选键而不是所有键?例如:
class Foo {
key1: number
key2: Object
key3: <other type>
}
const X = {
key1: 'foo'
key2: 'bar'
foo: // compilation error
}
因此,在此模型中,X
有一个密钥子集Foo
,并且针对不存在的密钥进行编译时检查。基本上是Partial<Foo>
,但与Partial<Foo>
不同,我想要这样,如果有人引用X.key3
,则由于key3
未在X上定义而将无法编译。这可能吗?
答案 0 :(得分:0)
如果我对您的问题的理解是正确的:您想要一个类型,该类型是另一种类型的子集,那么新类型的所有属性都必须是必需的。
以下为您工作吗?
class Foo {
key1?: number;
key2?: Object;
key3?: string;
};
type Bar = Required<Pick<Foo, 'key1' | 'key2'>>;
const bar: Bar = {
key1: 3,
key2: {},
};
说明:
Pick<T, 'prop1' | 'prop2' | ...>
来选择另一种类型的键的子集Required<T>