【发布时间】:2016-05-06 14:07:49
【问题描述】:
我在 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:类型“{}”不可分配给类型 '九'。类型“{}”中缺少属性“b”。
【问题讨论】:
-
IMO,答案stackoverflow.com/a/35074490/129196 不应该是采取的方法。如果您可以在没有初始化其所有属性的情况下使对象处于某种状态并且仍然有效,那么您应该将这些属性声明为可选,如以下答案所示:stackoverflow.com/a/43226857/129196。否则我们将失去使用 typescript 的唯一目的(为了类型安全)。
标签: typescript