类属性未扩展为继承的类型

时间:2019-10-11 17:58:58

标签: typescript

当我为使用部分类型声明的变量分配部分值时,其类型仍为部分:

let x: { a: string, b?: string }
x = { a: "a" }
x.b  // fine, x <=> {a:string, b?:string}

与类属性相同:

class X {
  prop: { a: string, b?: string } = { a: "a" }
}
(new X).prop.b // fine, prop <=> {a:string, b?:string}

但是,继承的属性似乎并不遵循此规则,而是分配了确切的类型:

class Y extends X {
  prop = { a: "a" }
}
(new Y).prop.b // FAIL, prop <=> {a:string}

PG

如何解释这种行为?

1 个答案:

答案 0 :(得分:1)

问题是创建了类Y,它将检查prop与类型{ a: string, b?: string }兼容,但是它将返回您传递的对象文字的确切类型。不包含b。您可以直接返回{ a: string, b?: string },但随后会丢失对象文字的属性名称,这很不幸。所以您可以尝试:

((new Y).prop as { a: string, b?: string }).b