问题描述
我有以下判别联合,其中属性 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