Typescript让可选属性变成必选

2,512 阅读1分钟

在 TypeScript 中设置某些可选属性为必需

要使可选属性成为必需属性,请创建一个实用程序类型,该实用程序类型使用映射修饰符来删除指定属性的可选性。

新类型将具有标记为必需的指定属性。

interface Employee {
  id?: number;
  name: string;
  salary?: number;
}

type WithRequiredProperty<Type, Key extends keyof Type> = Type & {
  [Property in Key]-?: Type[Property];
};

// 👇️ Make salary required
const emp1: WithRequiredProperty<Employee, 'salary'> = {
  name: 'Bobby Hadz',
  salary: 100,
};

// 👇️ Make salary and id required
const emp1: WithRequiredProperty<Employee, 'salary' | 'id'> = {
  id: 0,
  name: 'Bobby Hadz',
  salary: 100,
};

我们创建了一个实用程序类型,它接受一个类型和一个属性名称,并使该属性成为必需的。

您可以使用实用程序类型来创建多个属性,方法是用竖线分隔它们的名称。

-?: 语法称为映射修饰符,用于影响可选性。

让所有属性必选

使用typescript内置的 Required 工具类型使类型中的所有属性成为必需的。

interface Employee {
  id?: number;
  name?: string;
  salary?: number;
}

const emp: Required<Employee> = {
  id: 1,
  name: 'Bobby Hadz',
  salary: 1000,
};

Required源码

type Required<T> = {
  [P in keyof T]-?: P[T];
}

引用

make-property-required