我不确定这些名称是什么,因此我在寻找答案时遇到了一些麻烦。假设我定义了以下接口:
interface Person {
name: string;
age: number;
}
以下内容有什么区别?
const foo: Person = getPerson(data);
和
const foo = getPerson(data) as Person;
似乎两者都告诉TS foo
是Person
。根本上有什么区别吗?还是仅使用使我的船浮起的东西就可以了?
答案 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 Person
为foo
返回的类型。但是,通过添加getPerson(data)
可以明确地告诉TypeScript,“无论此函数返回什么,即使它实际上不是as Person
,我也要您强制将其键入为Person
”。
希望它能回答一些问题。