给定一个判别式,获取判别联合的对应成员的属性类型

问题描述

我有以下判别联​​合,其中属性 id 根据判别式的值获取不同的类型:

type TableKind = 'administration' | 'data'

type AdministrationTableId = 'Modules' | 'Users' | 'Roles'
type DataTableId = number

type GenericIdentifier<K extends TableKind,ID> = { kind: K,id: ID }

type AdministrationTableIdentifier = GenericIdentifier<'administration',AdministrationTableId>
type DataTableIdentifier = GenericIdentifier<'data',DataTableId>

type TableIdentifier = AdministrationTableIdentifier | DataTableIdentifier

我想创建一个泛型类型,它接受判别式并返回相应联合成员的 id 属性的类型:

type GetTableIdType<K extends TableKind> = ???

type AdminId = GetTableIdType<'administration'> // returns AdministrationTableID
type DataId = GetTableIdType<'data'> // returns DataTableId

这可能吗?这怎么可能实现?

解决方法

只需使用 Extract

type TableKind = 'administration' | 'data'

type AdministrationTableId = 'Modules' | 'Users' | 'Roles'
type DataTableId = number

type GenericIdentifier<K extends TableKind,ID> = { kind: K,id: ID }

type AdministrationTableIdentifier = GenericIdentifier<'administration',AdministrationTableId>

type DataTableIdentifier = GenericIdentifier<'data',DataTableId>

type TableIdentifier = AdministrationTableIdentifier | DataTableIdentifier


type GetTableIdType<K extends TableKind> = Extract<TableIdentifier,{ kind: K }>['id']

type AdminId = GetTableIdType<'administration'> // returns AdministrationTableID
type DataId = GetTableIdType<'data'> // returns DataTableId

Playground