interface SStitle {
title: string;
}
const x:SStitle = { title: "AZ5"};
if(???){...}esle{...} //x === SStitle
我有一个SStitle接口。我想用if (???)
编写这样的逻辑,将X类型与SStitle类型进行比较。
答案 0 :(得分:2)
这是要注意的一件事。 Typescript定义类型(使用interface
和type
关键字)。而且,由于将TS编译为JavaScript,因此类型会从输出JS文件中完全删除。
因此,要确保x
在运行时的类型为SStitle
,我们应该依靠SStitle
的某些属性,这些属性将在编译后保留。
在TS中,这是使用type guards实现的。
因此带有类型防护的代码将如下所示
interface SStitle {
title: string;
}
const x: SStitle = { title: "AZ5" };
// This function is type guard, which works during compilation and during run time.
function isSStitle (x: any): x is SStitle {
return x.title !== undefined;
}
if (isSStitle(x)) {
console.log("x is SStitle");
} else{
console.log("x is NOT SStitle");}