Typescript 为什么我可以对类型化数组接口使用空值“[]”,而对类型化对象接口不能使用空值“{}”?
我注意到我可以将下面的friends初始化为空数组[],但对于具有空对象{}的会话,我不能这样做。为什么会这样?有没有办法使用空对象而不必在界面中选择所有键Typescript 为什么我可以对类型化数组接口使用空值“[]”,而对类型化对象接口不能使用空值“{}”?,typescript,Typescript,我注意到我可以将下面的friends初始化为空数组[],但对于具有空对象{}的会话,我不能这样做。为什么会这样?有没有办法使用空对象而不必在界面中选择所有键 const initialState: { friends: Array<{ name: string; age: number; }>; session: { login: string; avatar: string; } } = { friends: [], // all
const initialState: {
friends: Array<{
name: string;
age: number;
}>;
session: {
login: string;
avatar: string;
}
} = {
friends: [], // all good
session: {} // throws error!
};
因为[]仍然是数组长度为零的有效数组
但是{}不是形式为{login:string;avatar:string}的有效对象,因为[]仍然是数组长度为零的有效数组
但是{}不是{login:string;avatar:string}形式的有效对象如果您有一个对象,让x={}并设置x.login=name,那么您刚刚更改了对象的格式。现在,如果一个给定类型的数组是空的,那么它仍然可以被认为是空的
如果您想要一个同时接受对象{}和{login:string,avatar:string}的界面,您可以使用:
interface GenericObject {
[property: string]: any;
}
但是要小心使用,如果你想要任何格式的对象,你可能不会首先键入你的代码。如果你有一个对象,让x={},然后设置x.login=name,你就改变了对象的格式。现在,如果一个给定类型的数组是空的,那么它仍然可以被认为是空的
如果您想要一个同时接受对象{}和{login:string,avatar:string}的界面,您可以使用:
interface GenericObject {
[property: string]: any;
}
但是要小心使用,如果您想要任何格式的对象,您可能不会首先键入代码