typescript - Belirli bir tür için birleştirme fonksiyonları koleksiyonunu yazmak
Eğer şöyle bir türüm varsa:
interface ITest {
a: number;
b: string;
c: boolean;
}
Bir türün verilen bir özelliğini birleştirmek için bir 'fonksiyon koleksiyonu' olabilecek bir türü genel olarak tanımlayabilmeyi isterim.
Bir bireysel 'Birleşme'yi şöyle tanımlayabilirim:
type Merger<T, K extends keyof T> = (a: T[K], b: T[K]) => T[K];
Ama bunların tam bir koleksiyonuna sahip olabilmeyi düşünürdüm, örneğin:
const mergers: Mergers<ITest> = {
a: (a: number, b: number) => a + b, // should work with no error
b: (a: string, b: number) => `${a}: ${b}`, // this one should error
}
Bu yapılabilir mi?
Cevap #1
T anahtarları üzerinde işlem yapmak için sadece bir eşlenen tip kullanmanız yeterlidir. Parametreler için bağlamsal tipleri bile alacaksınız:
type Merger<T, K extends keyof T> = (a: T[K], b: T[K]) => T[K];
type Mergers<T> = {
[P in keyof T]: Merger<T, P>
}
const mergers: Mergers<ITest> = {
a: (a, b) => a + b, // ok, contextualy typed a and b
b: (a: string, b: number) => `${a}: ${b}`, // error
}
Oyun Alanı Bağlantısı
