Skip to content

3.6.4 Partial field matching does not work for conditional type #33944

Closed
@crisslion

Description

@crisslion

TypeScript Version:

3.6.4

Search Terms:
Partial field conditional matching
3.6.4 conditional partial
Code

export type QueryType = (
  { __typename?: 'TypeOne' } & { a: boolean }
) | (
  { __typename?: 'TypeTwo' } & { a: boolean }
) | (
  { __typename?: 'TypeThree' } & { a: boolean }
);

type PickFromUnion<Union, Typename> =
  Union extends { __typename?: Typename } ? Union : never;

type FirstType = PickFromUnion<QueryType, 'TypeOne'>;

Expected behavior:
FirstType would be of type { __typename?: 'TypeOne' } & { a: boolean }
Actual behavior:
FirstType is of type QueryType

Playground Link:
3.6.3 where it works
http://www.typescriptlang.org/play/?ts=3.6.3#code/KYDwDg9gTgLgBDAnmYcCKBXYVEBVmoC8cAFAFBxwDecA+rUigHYCGAtsAPwBccA5PhQB5JsD5wAvnABk1OC14AjCBAA2wFk0lkAlHAA+pCnPqNgrDj36DguAO4RxU2TQVxlajVom6DRyjSmBBZcvAIEuAAWUMBikjJybh7qmto6ANxkZGZwAAoAlgDGANYAYlAQbACqTPkQTAA8NXVMADRwNiEAfHCExs31cKAw5gAmAM4mDMHsoR0zHPGccANavKIAbtiZ2QRwpflQ4zA2vXlFZRXVtfUNmNh4BO3hwqJ8XelAA

3.7 where it does not work (3.6.4 not provided in playground)
http://www.typescriptlang.org/play/?ts=3.7-Beta#code/KYDwDg9gTgLgBDAnmYcCKBXYVEBVmoC8cAFAFBxwDecA+rUigHYCGAtsAPwBccA5PhQB5JsD5wAvnABk1OC14AjCBAA2wFk0lkAlHAA+pCnPqNgrDj36DguAO4RxU2TQVxlajVom6DRyjSmBBZcvAIEuAAWUMBikjJybh7qmto6ANxkZGZwAAoAlgDGANYAYlAQbACqTPkQTAA8NXVMADRwNiEAfHCExs31cKAw5gAmAM4mDMHsoR0zHPGccANavKIAbtiZ2QRwpflQ4zA2vXlFZRXVtfUNmNh4BO3hwqJ8XelAA

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions