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>;
 }

İlgili makaleler