无法匹配类型?

时间:2019-07-18 19:51:59

标签: typescript

如何使TS将x识别为B

type A = { __typename: 'A', foo: true }
type B = A & { __typename: 'B' }
type C = A & { __typename: 'C' }

type X = B | C;

const x: X = { __typename: 'B', foo: true }

您可以在此处使用它:http://www.typescriptlang.org/play/#code/C4TwDgpgBAglC8UDeUD6rSQHYEMC2EAXFAOQwkA0UAZgPa3HABOArtAL4BQm0AQgrCgAyZGgzgIuAsRK8SULjygBhAXBEp0PKUVLL5XbhKgANAfwA+KgNydOAY1pYAzsCgAPYmcSbx2fLqylDT0jKwcnEA

2 个答案:

答案 0 :(得分:2)

您的类型实际上没有意义,因为B实际上是:

type B = { __typename: 'A', foo: true } & { __typename: 'B' };

__ typename不能同时为字符串A和字符串B,因此,此类型将不匹配。

答案 1 :(得分:0)

好吧,如果您真的想继续前进,那么我想您可以将其再次强制类型X转换为无声TypeScript。但是,正如@Evert所提到的,该类型实际上没有任何意义。

type A = { __typename: 'A', foo: true }
type B = A & { __typename: 'B' }
type C = A & { __typename: 'C' }

type X = B | C;

const x: X = <X>{ __typename: 'B', foo: true }

console.log(x.__typename)