我要完成以下任务:
假设我有这个:
interface Foo {
bar: number
bas: string
}
let foo = {} as Foo;
foo.bar = 123;
如何确保我的接口的所有成员在编译时都具有非null值? 例如像这样:
let x = foo.bas;
应该导致错误。
我知道可能的实现是通过构造函数实现的,但实际上我有许多接口可以用作API的自文档说明,并且我不想更改所有接口(或者我可以为它们创建一个基类)确保所有成员都具有不确定性)?
我当然可以执行以下操作:
let x : Foo = {
bar: 1
bas: 'x'
}
但是,如果我现在还不知道bas
并且我有意地希望它未定义怎么办,因为稍后我会知道bas
,但是我想知道我忘记初始化{{ 1}}是在我访问bas
的那一行的编译时?
答案 0 :(得分:2)
您正在使用演员表。在这个方向上,您无能为力。
以这种方式使用强制类型转换可以避免很多Typescripts检查,因为您基本上是在告诉它忽略错误。您给它提供一个对象,该对象显然与合同不匹配,然后您告诉它将其视为与合同匹配。这样就可以了。
但是,您可以改为使用接口类型的声明变量:
let foo: Foo = {
bar: 123
}; // will result in an error, because bas is required.
关于您的更新:
这是不可能的。变量要么与合同匹配,要么不匹配。该检查是在分配时发生的,而不是在使用属性时发生的。