如何禁止 TypeScript 接口中的可选属性未定义

问题描述 投票:0回答:1

我想定义一个带有可选属性的打字稿接口,例如:

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 = {
};

因为这两个对象之间是有区别的。

typescript interface
1个回答
0
投票

您可以使用

exactOptionalPropertyTypes

启用

exactOptionalPropertyTypes
后,TypeScript 对于如何处理带有 ? 的类型或接口上的属性应用更严格的规则。前缀。

您甚至在官方页面中有一个示例:

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.
© www.soinside.com 2019 - 2024. All rights reserved.