的声明类型是什么
export const serverInfo = {
"@me": {
unread: true,
},
servers: [
{
id: 1,
name: "Detaux",
unread: false,
type: "server",
icon: "detaux.webp",
gif: null,
},
// Many more ..
{
type: "folder",
servers: [
{
id: 5,
name: "freeCodeCamp",
unread: true,
type: "server",
icon: "freeCodeCamp.webp",
gif: null,
},
// Many more ..
],
},
],
};
在这个对象中,数组中有两种不同类型的元素,所以我对如何给出类型声明感到困惑。
您可以实现两个接口,Server
和Folder
,以及使用并集类型的类型Info
(实际上,Info
也可以是一个接口(:
interface Server {
id: number;
name: string;
unread: boolean;
type: string;
icon: string;
gif: string;
}
interface Folder {
type: 'folder';
servers: Server[];
}
type Info = { '@me': { unread: boolean }; servers: Array<Server | Folder> };
export const serverInfo: Info = { ... };
编辑:对我来说很好:
export const serverInfo: Info = {
'@me': {
unread: true
},
servers: [
{
id: 1,
name: 'Detaux',
unread: false,
type: 'server',
icon: 'detaux.webp',
gif: null
},
// Many more ..
{
type: 'folder',
servers: [
{
id: 5,
name: 'freeCodeCamp',
unread: true,
type: 'server',
icon: 'freeCodeCamp.webp',
gif: null
}
// Many more ..
]
}
]
};