打字稿如何比较声明的类型

时间:2019-07-02 02:23:51

标签: typescript

interface SStitle {
  title: string;
  }
  const x:SStitle = { title: "AZ5"};

  if(???){...}esle{...} //x === SStitle

我有一个SStitle接口。我想用if (???)编写这样的逻辑,将X类型与SStitle类型进行比较。

1 个答案:

答案 0 :(得分:2)

这是要注意的一件事。 Typescript定义类型(使用interfacetype关键字)。而且,由于将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");}