如何在Typescript中获取变量的类型?

29 浏览
0 Comments

如何在Typescript中获取变量的类型?

我有一个变量。\n

abc:number|string;

\n我该如何检查它的类型?我想要做类似下面这样的操作:\n

if (abc.type === "number") {
    // 做一些操作
}

0
0 Comments

在Typescript中,要获取变量的类型,可以使用TypeGuards对字符串或数字进行比较,如果要比较对象,则需要使用instanceof操作符。比如下面的代码:

if(task.id instanceof UUID) {
  //foo
}

需要注意的是,这种方法只适用于class,而不适用于Typescript的interface或type,因为这些在导出的JavaScript文件中不存在。

0
0 Comments

问题的出现原因是当使用接口时,不能使用typeof或instanceof来获取变量类型,因为接口在编译为JavaScript时会被忽略。解决方法是使用类型转换和函数检查的类型守卫来检查变量类型。在给定的代码示例中,定义了两个接口Car和Bike,并定义了一个名为start的函数,参数为Bike或Car类型的vehicle。在函数内部,首先调用vehicle的drive方法,然后通过类型转换和函数检查来判断vehicle的具体类型,如果是Bike类型,则调用ringTheBell方法,如果是Car类型,则调用honkTheHorn方法。这样可以根据变量的具体类型来执行相应的操作。

在示例中展示了TypeScript编译为ES2017后的JavaScript代码,可以看到在JavaScript中并没有类型转换的语法,只是简单地根据具体类型调用相应的方法。

还有关于接口和类的一个重要区别,希望能够有更多更符合习惯的方法来解决这个问题,但是目前这种解决方法也是有效的。

最后,作者提到了在tsx文件中是否可以使用这种方法。对于React而言,它期望的是是一个组件,而不是一个TS类型。

0
0 Comments

在Typescript中,如何获取变量类型?

在Typescript中,我们可以使用typeof操作符来获取变量的类型。例如,对于变量abc,我们可以使用typeof abc === "number"来判断abc是否为number类型。如果是,我们可以执行相应的操作。这被称为类型守卫。

对于类的实例,我们可以使用instanceof操作符来判断实例的类型。例如,我们有两个类Foo和Bar,如果一个变量fooOrBar是Foo类的实例,我们可以使用if (fooOrBar instanceof Foo)来判断fooOrBar的类型为Foo。

除了typeof和instanceof之外,还有其他的类型守卫,比如in等。你可以在这个链接中了解更多信息:https://basarat.gitbook.io/typescript/type-system/typeguard

需要注意的是,这些方法并不是直接获取变量的类型,而是确认变量的类型是否符合我们的要求。

如果变量的类型是一个函数,那么以上的方法并不能直接获取函数的类型。

0