我在 TypeScript 中有以下界面:
interface IX {
a: string,
b: any,
c: AnotherType
}
我声明该类型的变量并初始化所有属性
let x: IX = {
a: 'abc',
b: null,
c: null
}
然后我稍后在 init 函数中为它们分配实际值
x.a = 'xyz'
x.b = 123
x.c = new AnotherType()
但是我不喜欢在声明对象时为每个属性指定一堆默认的空值,因为它们稍后将被设置为实际值。我可以告诉接口将我不提供的属性默认为 null 吗?什么会让我这样做:
let x: IX = {
a: 'abc'
}
没有得到编译器错误。现在它告诉我
TS2322:类型“{}”不可分配给类型“IX”。类型“{}”中缺少属性“b”。
原文由 d512 发布,翻译遵循 CC BY-SA 4.0 许可协议
不可以。您不能为接口或类型别名提供 _默认值_,因为它们只是编译时的,默认值需要运行时支持
选择
但未指定的值在 JavaScript 运行时默认为
undefined
。因此,您可以将它们标记为可选:现在,当您创建它时,您只需要提供
a
:您可以根据需要提供值: