我正在尝试使以下内容起作用,但是打字稿在尝试访问o.foo
属性时输出错误:
type Base = { s: string };
type Extra = { foo: string; };
type Other = { bar: string; };
type T = Base & (Extra | Other);
function f(o: T): string {
if (typeof o.foo === 'string') {
return o.s + o.foo;
}
return o.s + o.bar;
}
错误是
Property 'foo' does not exist on type 'T'.
Property 'foo' does not exist on type 'Base & Other'.
看来打字稿无法正确推断,如果o
具有foo
属性(即字符串),则o
的类型必须在{{1} }工会的分支机构。
有什么办法让它理解这一点?
答案 0 :(得分:1)
除非他们是共同的,否则您不能访问工会的成员。您可以改用in
字体保护符:
type Base = { s: string };
type Extra = { foo: string; };
type Other = { bar: string; };
type T = Base & (Extra | Other);
function f(o: T): string {
if ('foo' in o) {
return o.s + o.foo;
}
return o.s + o.bar;
}