Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么';功能类型';可适用于';{}型';_Javascript_Typescript - Fatal编程技术网

Javascript 为什么';功能类型';可适用于';{}型';

Javascript 为什么';功能类型';可适用于';{}型';,javascript,typescript,Javascript,Typescript,看看下面的代码,没有错误,我想知道为什么函数类型可以应用于{}类型 “typescript”:“~2.9.1” 在typescript中键入是结构化的,{}定义了一个没有成员的类型。任何其他类型都可以与此类型兼容。基本体、函数、其他对象、任何内容: let s: {}; s = 1; s = "" s = () => "" s = null // err under strictNullChecks 在严格的空检查下,null和undefined不能分配给{}。但除此之外,任何东西都可以

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

“typescript”:“~2.9.1”


在typescript中键入是结构化的,
{}
定义了一个没有成员的类型。任何其他类型都可以与此类型兼容。基本体、函数、其他对象、任何内容:

let s: {};
s = 1;
s = ""
s = () => ""
s = null // err under strictNullChecks
在严格的空检查下,
null
undefined
不能分配给
{}
。但除此之外,任何东西都可以分配给
{}

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


“我不知道typescript,但在javascript中,(几乎)一切都是对象,包括函数——10分钟前的Jaromanda X "
不,恰恰相反,在JavaScript中,一切都是函数,这意味着对象是函数,主值也是函数。例如,对象扩展(继承)函数,而不是相反。

我不知道typescript,但在javascript中,(几乎)一切都是对象,包括函数。这个问题不是关于
对象
构造函数,而是关于对象类型
{}
,它不是函数。另见
let s: {};
s = 1;
s = ""
s = () => ""
s = null // err under strictNullChecks
let s: object;
s = 1; //err
s = "" // err
s = () => ""
s = { foo: ""};
s = null // err under strictNullChecks