typescript - PickByValue türü nasıl yazılır?
Pick türü TypeScript ile birlikte gelir. Uygulaması aşağıdaki gibidir:
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
Aşağıdakinin çalışmasını sağlayacak bir PickByValue türünü nasıl yazardınız:
type Test = {
includeMe: 'a' as 'a',
andMe: 'a' as 'a',
butNotMe: 'b' as 'b',
orMe: 'b' as 'b'
};
type IncludedKeys = keyof PickByValue<Test, 'a'>;
// IncludedKeys = 'includeMe' | 'andMe'
Cevap #1
Varsayalım ki Test'in bunu ifade etmesini amaçlıyorsunuz:
type Test = {
includeMe: 'a',
andMe: 'a',
butNotMe: 'b',
orMe: 'b'
};
ve PickByValue<T, V>'nin, V'nin alt türleri olan tüm özellikleri vermesini istediğinizi varsayarsak (öyle ki PickByValue<T, unknown> T olmalıdır), o zaman PickByValue'yi şu şekilde tanımlayabilirsiniz:
type PickByValue<T, V> = Pick<T, { [K in keyof T]: T[K] extends V ? K : never }[keyof T]>
type TestA = PickByValue<Test, 'a'>; // {includeMe: "a"; andMe: "a"}
type IncludedKeys = keyof PickByValue<Test, 'a'>; // "includeMe" | "andMe"
Ama tek istediğiniz IncludedKeys ise, bunu KeysMatching<T, V> ile daha doğrudan yapabilirsiniz:
type KeysMatching<T, V> = {[K in keyof T]: T[K] extends V ? K : never}[keyof T];
type IncludedKeysDirect = KeysMatching<Test, 'a'> // "includeMe" | "andMe"
Koda yönelik oyun alanı bağlantısı
