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
相同的属性,但所有属性都是可选的。这样,你就可以在不修改原始接口的情况下,轻松地创建一个所有属性都是可选的新类型。