给出严格的空检查和类似
的界面export interface Foo {
a?: string;
b: string|undefined;
c: string|null;
d: string|undefined|null;
}
function bar(foo: Foo) { ... }
我希望a
的行为与b
,c
或d
相似。相反,我发现a
的行为与所有这些行为都不同。
bar({b: undefined, c: null, d: undefined}); // works
bar({c: null, d: undefined}); // 'b' is missing in type '{...}'
bar({b: undefined, d: undefined}); // 'c' is missing in type '{...}'
bar({b: undefined, c: null}); // 'd' is missing in type '{...}'
这是预期的行为吗?有没有办法在没有?:
语法的接口上实现可选属性行为?
答案 0 :(得分:1)
这是预期的行为吗?
是的,我发现a comment on github确认了它的设计:
这是设计的。只有在声明属性时才能省略属性 用一个?改性剂。
此外,它不依赖于打开严格的空值检查。
有没有办法在a上实现可选的属性行为 没有?:语法的接口?
不,大概是因为有人可能会从你的例子中找到所有4种行为。
答案 1 :(得分:0)
在这种情况下,即使属性a
采用相同类型的b
,如果需要可选属性,仍需要使用?
字符。
对于结构类型检查,类型string|undefined
不能确保此属性是可选的。
所以,这是预期的行为。