如何在与restaurants的接口中定义TypeScript属性?
let test = {
user_id: 5,
restaurants: [
{
restaurant_id: 5,
restaurant_rank: 5
},
{
restaurant_id: 6,
restaurant_rank: 6
}
],
timestamp: 'test'
};备注
我看过以下问题,但没有一个问题解决了我的问题:
How can I define an interface for an array of objects with Typescript?
发布于 2017-04-12 03:43:24
我的写作方式是这样的:
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,因为对象比任何对象都具有更大的限制性。请参阅https://stackoverflow.com/a/18961904/2592233
我还在restaurant_details后面添加了一个问号,告诉编译器这是可选的,因为在第一个示例中没有。
发布于 2017-03-24 07:23:19
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
}这样做将允许InterfaceName.restaurants被TypeScript编译器正确地视为array。
https://stackoverflow.com/questions/42993657
复制相似问题