我猜这意味着空物体,但不确定...
我在https://www.typescriptlang.org/docs/handbook/basic-types.html上找不到该类型。
interface Component<P = {}, S = {}, SS = any> extends ComponentLifecycle<P, S, SS> { }
答案 0 :(得分:2)
类型{}
并不完全表示“空对象”,因为可以将其他类型的对象(可能不是空的)分配给类型{}
。例如:
function acceptsEmpty(obj: {}): void {
console.log(obj);
}
let notEmpty: {a: string} = {a: 'test'};
// no error; {a: string} is asssignable to {}
acceptsEmpty(notEmpty);
因此,本质上,类型{}
表示“不需要具有任何属性,但可以具有某些属性”,同样,类型{a: string}
意味着“必须具有名为a
的属性,其值是string
,但也可能具有其他属性。
因此{}
对其值几乎没有限制;唯一的规则是不能为null
或undefined
。在这方面,它与类型object
相似,不同之处在于object
也禁止原始值,而{}
允许它们:
// no error
let anything: {} = 1;
// error: Type '1' is not assignable to type 'object'.
let noPrimitivesAllowed: object = 1;
答案 1 :(得分:1)
Component<P = {}, S = {}, SS = any>
表示P和S的默认类型是空对象。
因此,可以将接口与0..3通用参数一起使用,如下所示:
const a: Component // = Component<{},{},any>
const b: Component<SomeType> // = Component<Some,{},any>
const c: Component<SomeType, SomeOtherType> // = Component<SomeType, SomeOtherType, any>
const d: Component<SomeType, SomeOtherType, []> // = Component<SomeType, SomeOtherType, []>