首页 > 解决方案 > 打字稿需要字段的子集

问题描述

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

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 上定义。这可能吗?

标签: typescript

解决方案


如果我正确理解您的问题:您想要一个类型是另一种类型的子集,并且应该需要新类型的所有属性。

以下内容对您有用吗?

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>

推荐阅读