在Typescript中使用`:Interface`和`as Interface`有什么区别?

时间:2019-11-02 11:41:13

标签: javascript typescript

我不确定这些名称是什么,因此我在寻找答案时遇到了一些麻烦。假设我定义了以下接口:

interface Person {
  name: string;
  age: number;
}

以下内容有什么区别?

const foo: Person = getPerson(data);

const foo = getPerson(data) as Person;

似乎两者都告诉TS fooPerson。根本上有什么区别吗?还是仅使用使我的船浮起的东西就可以了?

2 个答案:

答案 0 :(得分:4)

使用

const foo: Person = getPerson(data);

您告诉编译器:我假设getPerson返回的是实现Person接口的内容,请检查该内容,并责怪我。

const foo = getPerson(data) as Person;

是一个断言,使用它可以使编译器确保getPerson返回Person,即使它们另有含义。基本上,这是关闭类型检查器的一种方法,而且通常不是一个好主意。

答案 1 :(得分:3)

const foo: Person = getPerson(data);

是类型注释,表示您在说“我希望foo属于Person类型”。但是,如果getPerson(data)返回的是Person以外的其他内容,TypeScript会说“不,不,不,那是不允许的。您想要Person,但是{{1} }不会返回该值,不好!”


getPerson(data)

const foo = getPerson(data) as Person; 是一个类型声明,如果您在没有as Person的情况下编写了此声明,TypeScript将推断as Personfoo返回的类型。但是,通过添加getPerson(data)可以明确地告诉TypeScript,“无论此函数返回什么,即使它实际上不是as Person,我也要您强制将其键入为Person”。

希望它能回答一些问题。