{}在TypeScript中是什么意思?

时间:2020-02-24 18:05:59

标签: typescript

我猜这意味着空物体,但不确定...

我在https://www.typescriptlang.org/docs/handbook/basic-types.html上找不到该类型。

interface Component<P = {}, S = {}, SS = any> extends ComponentLifecycle<P, S, SS> { }

2 个答案:

答案 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,但也可能具有其他属性。

因此{}对其值几乎没有限制;唯一的规则是不能为nullundefined。在这方面,它与类型object相似,不同之处在于object也禁止原始值,而{}允许它们:

// no error
let anything: {} = 1;

// error: Type '1' is not assignable to type 'object'.
let noPrimitivesAllowed: object = 1;

Playground Link

答案 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, []>