我想定义一个带有可选属性的打字稿接口,例如:
interface SquareConfig {
color?: string;
width?: number;
comments?: string[];
}
以下常量是有效实例:
const a: SquareConfig = {};
const b: SquareConfig = {color: 'red'};
const c: SquareConfig = {
width: 99,
comments: ['bla']
};
以及“d”:
const d: SquareConfig = {
color: undefined,
comments: undefined
};
如何定义 SquareConfig 类型以不允许未定义的属性? “d”应该被禁止,但“e”应该是可能的:
const e: SquareConfig = {
};
因为这两个对象之间是有区别的。
您可以使用
exactOptionalPropertyTypes
。
启用
后,TypeScript 对于如何处理带有 ? 的类型或接口上的属性应用更严格的规则。前缀。exactOptionalPropertyTypes
您甚至在官方页面中有一个示例:
interface UserDefaults {
// The absence of a value represents 'system'
colorThemeOverride?: "dark" | "light";
}
const settings = getUserSettings();
settings.colorThemeOverride = "dark";
settings.colorThemeOverride = "light";
// But not:
settings.colorThemeOverride = undefined;
Type 'undefined' is not assignable to type '"dark" | "light"' with
'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the type of
the target.