打字稿需要字段子集

时间:2019-10-03 19:15:59

标签: typescript

是否可以创建类型约束,以便类型包含对象的非可选键而不是所有键?例如:

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上定义而将无法编译。这可能吗?

1 个答案:

答案 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>
  • 设置类型所需的所有属性。