打字稿空对象和任何区别

时间:2017-11-16 22:04:04

标签: typescript

有人可以解释一下{}any之间的区别吗?

例如,将通用接口参数设置为Interface<{}>Interface<any>之间的区别。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

所以JavaScript中有类型。与numberstringobjectboolean一样。 any匹配任何这些类型。 {}只匹配空object

function fn1(foo: any): void {}
function fn2(foo: {}): void {}

fn1(23); // OK
fn1('test'); // OK
fn1(undefined); // OK
fn2({}); // OK
fn2(23); // Not OK
fn2(null); // Not OK

答案 1 :(得分:0)

要更好地了解{}是什么意思,请检查https://blog.mariusschulz.com/2017/02/24/typescript-2-2-the-object-type

{}是一种顶部类型。这是什么意思 ?如果您将某些内容注释为{},则可以是以下任何一种类型:string | number | boolean | object | {[key:string]: any} | Object | any[]

const test1: {} = 'hello'
const test2: {} = 123
const test3: {} = false
const test4: {} = {foo:'bar'}

尽管不允许使用null | undefined

// Expect errors
const test6: {} = null
const test7: {} = undefined

Playground link

any完全可以进行类型检查,您可以使用Vanilla JS进行任何疯狂的操作。专业提示:请勿在家使用:)绝对在ts-lint中使用no-any规则