2021-09-26 ts-给定的 keys 对应的属性变成可选/必选

// Q: 如何定义一个 SetOptional 工具类型,支持把给定的 keys 对应的属性变成可选的?
type Foo = {
  a: number;
  b?: string;
  c: boolean;
};

// 测试用例
type SomeOptional = SetOptional;

// Ans

type Simplify = {
  [P in keyof T]: T[P];
};

type SetOptional = Simplify<
  // Partial in 可有可无键值的那部分
  // Pick 必须有的键值的那部分
  Partial> & Pick>
>;

// type FooKeys = keyof Foo;
// const fooKey: FooKeys = 'b';

const fooInstance: Simplify = {
  a: 1,
  // b: '23', // 可以加上, 也可以不加
  c: false,
};

const fooOptionalInstance: SomeOptional = {
  c: false,
};

// 设置属性变成必选: SetRequired
type SetRequired = Simplify<
  // Required Pick 必须有的键值的那部分
  // Partial in 可有可无键值的那部分
  Required> & Partial>>
>;

type SomeRequired = SetRequired;

const fooRequiredInstance: SomeRequired = {
  a: 1,
  b: "str",
  // c: false,
}
cript

你可能感兴趣的:(2021-09-26 ts-给定的 keys 对应的属性变成可选/必选)