türler - TypeScript'te parametrik birleşim
Bir birleşimi parametrik olarak belirtmenin genel bir yolu var mı? Ben, şu gibi bir şeyi genel olarak belirtmenin bir yolunu arıyorum:
type U<K> = T<K1> | T<K2> | ... | T<Kn> // Where K === (K1 | ... | Kn)
Not: T<U | V> !== T<U> | T<V> durumu ile ilgileniyorum. (#14107 ve #16644’ın tam tersine bir durum)
Düzenle: K bir string sabitler birliği olduğunda aşağıdaki deseni keşfettim:
type U<K> = {[key in K]: T<key>}[K]
ama bunu bir fonksiyon argümanı olarak kullanmaya çalışırsam tür çıkarımıyla iyi çalışmıyor.
Cevap #1
TypeScript 2.8, bu dağıtımı gerçekleştirmek için koşullu tipler kullanarak başka bir yol sunar. Yayın duyurusundan bir örnek:
type Foo<T> = T extends any ? T[] : never;
/**
* Foo distributes on 'string | number' to the type
*
* (string extends any ? string[] : never) |
* (number extends any ? number[] : never)
*
* which boils down to
*
* string[] | number[]
*/
type Bar = Foo<string | number>;
