如何使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 }
答案 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)