簡體   English   中英

如何使用TypeScript在接口中定義對象的命名數組?

[英]How to define a named array of objects in an interface with TypeScript?

如何在帶有TypeScript的接口中定義restaurants屬性?

let test = {
  user_id: 5,
  restaurants: [
    {
      restaurant_id: 5,
      restaurant_rank: 5
    },
    {
      restaurant_id: 6,
      restaurant_rank: 6
    }
  ],
  timestamp: 'test'
};

注意

我查看了以下問題,但沒有一個解決了我的問題:

如何使用Typescript為對象數組定義接口?

如何在打字稿中定義對象數組?

我寫的方式是這樣的:

interface IRestaurant {
    restaurant_id: number;
    restaurant_rank: number;
    restaurant_details?: any;
}

interface IThing {
    user_id: number;
    timestamp: string;
    restaurants: Array<IRestaurant>;
}

const test: IThing = {
    user_id: 5,
    restaurants: [
        {
            restaurant_id: 5,
            restaurant_rank: 5
        },
        {
            restaurant_id: 6,
            restaurant_rank: 6
        }
    ],
    timestamp: 'test'
};

還有其他幾種方法可以執行數組:

interface IThing {
    user_id: number;
    timestamp: string;
    restaurants: IRestaurant[];
}

interface IThing {
    user_id: number;
    timestamp: string;
    restaurants: Array<{restaurant_id: number, restaurant_rank: number}>;
}

我在您回答的答復中注意到您執行restaurant_details: Object 您應該做restaurant_details: any因為Object比任何對象都更具限制性。 參見https://stackoverflow.com/a/18961904/2592233

我還在restaurant_details之后添加一個問號,以告訴編譯器這是可選的,因為在第一個示例中沒有。

看着這個這個答案,我想出了以下幾點:

 interface InterfaceName {
  user_id: number,
  restaurants: { [index: number]: { restaurant_details: Object, restaurant_rank: number } },
  timestamp: Date
}

但是,我發現它沒有被檢測為數組,因此一個更簡單的解決方案是:

interface InterfaceName {
  user_id: number,
  restaurants: { restaurant_details: Object, restaurant_rank: number }[],
  timestamp: Date
}

這樣做將允許TypeScript編譯器將InterfaceName.restaurants正確地視為array

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM