Hogyan az új szerinti tárgy felület géppel?

szavazat
0

Van egy felület, mint ez:

interface Response {
    items: {
        productId: string;
        productName: string;
        price: number;
    }[]
}

interface APIResponse {
    items: {
        productId: string;
        productName: string;
        price: number;
        factoryId: string,
        status: number,
        category: number,
        priority: number
    }[]
}

most van egy függvény visszatérési Response:

async function list(): promise<Response> {
    // data.htw.cart.list return APIResponse
    const rv = await data.htw.cart.list(postJson)
    return rv
}

Azonban data.htw.cart.listvisszaút APIResponse, csak kell Response, kapok túl sok adat.

minden alkalommal, amikor szükségünk van erre:

return {
  items: rv.items.map(item => {
    return {
      productId: item.productId,
      productName: item.productName,
      price: item.price
    }
  })
}

Azt akarom, hogy van egy eszköz, hogy távolítsa el néhány adatot APIResponse, amelyek APIResponseválik Response?

Két dolgot kell kiemelni:

  1. APIResponse minden esetben tartalmazzák Response
  2. kulcs nevét Response, amely magában foglalja az ugyanaz, mint aAPIResponse
A kérdést 25/05/2016 16:45
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Azt hiszem, a legtisztább módja az lenne, hogy megteremtse a megfelelő kapcsolatok között, a típusokat.

interface Item {
  productId: string
  productName: string
  price: number
}

interface APIItem extends Item {
  factoryId: string,
  status: number,
  category: number,
  priority: number
}

interface Response {
  items: Item[]
}

interface APIResponse extends Response {
  items: APIItem[]
}

// APIResponse is now assignable to Response
let response: Response = ...;
let apiResponse: APIResponse = ...;
response = apiResponse;

// APIItem[] is now also assignable to Item[], but you only loose 
// the type information, the fields will be there actually
const apiItems: APIItem[] = [...];
const items: Item[] = apiItems;

Tehát ez segít abban, hogy a fordító megérteni, hogy a típusok kapcsolódnak egymáshoz.

Ha azt szeretnénk, hogy „fizikailag” eltávolítani a felesleges mezőket, akkor a legjobb, amit tehetünk, az .map, amit írt a kérdést. Ön is használja a js könyvtárból (pl .: lodash / összeszedi ) - de akkor legyőzni a célból, hogy statikailag ellenőrzött típusú ...

Válaszolt 28/05/2016 09:09
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more