在打字稿中空对象类型{}的目的是什么?

时间:2019-12-09 14:13:33

标签: typescript

DefinitelyTyped库的@ types / React包中,我遇到了这个定义

interface FunctionComponent<P = {}> {
        (props: PropsWithChildren<P>, context?: any): ReactElement | null;
        propTypes?: WeakValidationMap<P>;
        contextTypes?: ValidationMap<any>;
        defaultProps?: Partial<P>;
        displayName?: string;
    }

我读到{}类型称为“空对象”类型,其目的是描述一个本身没有属性的对象。

有人可以解释为什么大多数通用函数将其用作默认类型吗?

2 个答案:

答案 0 :(得分:1)

  

有人可以解释为什么大多数通用函数将其用作默认类型吗?

这是许多反应类型的默认设置,因为如果您未指定所需的道具,则会假定您不需要任何道具。当您没有任何道具时,您的组件仍会收到一个道具对象,该对象上将没有任何属性,因此为空对象。

答案 1 :(得分:0)

在TypeScript 3.5之前,无法推断的每种类型都默认为{}。从那时起,它默认为unknown。这就是为什么在许多旧版代码中,您会看到{}而不是unknown的用法。

请注意,两者之间存在区别:{}不能为null,而unknown可以为