typescript - indeks türü sorgu operatörü ve extends anahtar kelimesi hakkında açıklama
Typescript'te Gelişmiş Tipler ile ilgili dokümantasyonu inceliyordum (burada bulundu: https://www.typescriptlang.org/docs/handbook/advanced-types.html) ve orada Dizin Sorgu Operatöründen bahsediliyordu ve aşağıdaki örnek verilmişti:
function pluck<T, K extends keyof T>(o: T, names: K[]): T[K][] {
return names.map(n => o[n]);
}
keyof’ın bir nesne T üzerindeki tüm bilinen genel özellik adlarının birleşimini nasıl ürettiğini anlıyorum ama extends’in tam olarak ne rol oynadığını tam olarak anlamıyorum. K’nın T’nin geçerli bir özelliği olması gerektiğini söylediğini anlıyorum ama neden extends kullanılıyor da başka bir şey değil? Ayrıca, Typescript’te birleşimleri genişletmek mümkün mü yoksa bu daha çok generiklere özgü bir anlam mı?
Teşekkürler.
Cevap #1
Bu bağlamda, extends anahtar kelimesi, bir tür parametresine kısıtlama eklemenin bir yoludur.
Bu basit örnek verildiğinde, derleyicinin sadece Person arayüzüne uyan nesneleri geçmenize izin verdiğini göreceksiniz:
interface Person {
name: string;
}
function logAndReturnPerson<T extends Person>(person: T) {
console.log(person.name);
return person;
}
// ok
const result1 = logAndReturnPerson<Person>({ name: "David" });
// not ok, string does not satisfy constraint of Person
const result2 = logAndReturnPerson<string>("");
Örneğinizde, K extends keyof T, K'nın keyof T ile sınırlı olduğu anlamına gelir. Başka bir deyişle, bu, düşündüğünüz anlamına gelir—K, T'nin bir özellik adı olmak zorunda olan bir stringdir.
Evet, bu jeneriklere özgü bir anlamsaldır. Bir kısıtlama içinde birleşim türü kullanmanın mümkün olduğunu unutmayın.
