跳到主要内容

TypeScript 如何让接口的所有属性都可选?

参考答案:

在 TypeScript 中,你可以通过使用 ? 符号来标记接口中的属性为可选。但是,如果你想要让接口的所有属性都可选,你需要为每个属性都加上 ?。这可能会显得冗余。

例如:

interface MyInterface {
  property1?: string;
  property2?: number;
  property3?: boolean;
  // 更多的属性...
}

不过,如果你想要简化这个过程,你可以考虑使用映射类型(Mapped Types)和条件类型(Conditional Types)来自动地为接口的所有属性添加 ?。这可以通过扩展 Record 类型或创建一个新的类型来完成。

以下是一个例子:

type AllOptional<T> = {
  [K in keyof T]?: T[K];
};

interface MyInterface {
  property1: string;
  property2: number;
  property3: boolean;
  // 更多的属性...
}

const obj: AllOptional<MyInterface> = {}; // 所有属性都是可选的

在这个例子中,AllOptional 是一个泛型类型,它接受一个类型 T 作为参数,并返回一个新的类型,该类型具有与 T 相同的属性,但所有属性都是可选的。这样,你就可以在不修改原始接口的情况下,轻松地创建一个所有属性都是可选的新类型。