为什么“函数类型”可以应用于“ {}类型”

时间:2019-04-24 12:55:21

标签: javascript typescript

看看下面的代码,没有错误,我想知道为什么function type可以应用于{} type

"typescript": "~2.9.1"

interface IIndexCtlState {
    x: {}
}
const state: IIndexCtlState = {
    x: function y() {return "sdf"}
}

2 个答案:

答案 0 :(得分:1)

键入打字稿是结构性的,{}定义了没有成员的类型。任何其他类型都可以与此类型兼容。基元,函数,其他对象,什么:

let s: {};
s = 1;
s = ""
s = () => ""
s = null // err under strictNullChecks

在严格的null检查下,nullundefined无法分配给{}。但是除此之外,可以将任何内容分配给{}

如果您要表示的是对象,则object类型可能会更好,但仍允许使用函数(因为函数是对象)

let s: object;
s = 1; //err
s = "" // err
s = () => ""
s = { foo: ""};
s = null // err under strictNullChecks

答案 1 :(得分:0)

“我不知道打字稿,但是在javascript中,(几乎)所有东西都是对象,包括函数– Jaromanda X 10分钟前 ” 恰恰相反,JavaScript中的一切都是函数,这意味着对象就是函数,主要值也是如此。例如对象的extends(inherit)函数,而不是相反的。