如何在Typescript中获取变量的类型?
问题的出现原因是当使用接口时,不能使用typeof或instanceof来获取变量类型,因为接口在编译为JavaScript时会被忽略。解决方法是使用类型转换和函数检查的类型守卫来检查变量类型。在给定的代码示例中,定义了两个接口Car和Bike,并定义了一个名为start的函数,参数为Bike或Car类型的vehicle。在函数内部,首先调用vehicle的drive方法,然后通过类型转换和函数检查来判断vehicle的具体类型,如果是Bike类型,则调用ringTheBell方法,如果是Car类型,则调用honkTheHorn方法。这样可以根据变量的具体类型来执行相应的操作。
在示例中展示了TypeScript编译为ES2017后的JavaScript代码,可以看到在JavaScript中并没有类型转换的语法,只是简单地根据具体类型调用相应的方法。
还有关于接口和类的一个重要区别,希望能够有更多更符合习惯的方法来解决这个问题,但是目前这种解决方法也是有效的。
最后,作者提到了在tsx文件中是否可以使用这种方法。对于React而言,它期望的是
在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
需要注意的是,这些方法并不是直接获取变量的类型,而是确认变量的类型是否符合我们的要求。
如果变量的类型是一个函数,那么以上的方法并不能直接获取函数的类型。