javascript - Typescript nesne rest tipleri argümanda
Ben Typescript'e biraz yeniyim ve kod tabanımın %90'ı için tipleri yapabiliyorum. Ama rest/spread operatörlerine gelince tamamen kayboluyorum. Bugün kodumuzda buna denk geldim (bunu ben yazmadım) ama çalışmadığını anladım:
interface searchClient {
searchForValues({
name,
query,
...qp,
}: {
name: string;
query: string;
qp: QpInterface; //???this part doesn't work
}): Promise<any>;
}
interface QpInterface {
page?: number;
hits?: number;
attributes?: string;
}
Çalışmıyor çünkü qp, yazmada anahtarın adını belirtiyor, oysa benim yazmak istediğim ...qp kısmı. ...qp'deki her anahtar/değer çifti, QpInterface tarafından yazılıyor.
İşte bir örnek fonksiyon çağrısı:
this.searchClient.searchForValues({
name: 'title',
query: 'little sheep',
page: 5,
hits: 2
});
Dokümantasyonda bununla ilgili çok bir şey bulamadım. ...qp: QpInterface; ve ...QpInterface; eklemeyi denedim ama işe yaramadı. Argümanda ...qpyi yazmanın en iyi yolu nedir?
Cevap #1
TypeScript'te yayılma tipleri uygulanana kadar, bunun için kesişim tipini kullanabilirsiniz:
interface searchClient {
searchForValues({
name,
query,
...qp,
}: {
name: string;
query: string;
}
& QpInterface): Promise<any>;
}
