在 TypeScript 中,当尝试验证类型为 any 的变量是否遵循以下条件时,会出现一个常见的困境运行时指定的接口。考虑以下代码:
interface A { member: string; } var a: any = { member: "foobar" }; if (a instanceof A) alert(a.member);
这里,TypeScript Playground 在最后一行生成一个错误,声称名称 A 在当前作用域中未定义。然而,这是不正确的,因为 A 已明确定义。要解决此问题,重要的是要了解接口在生成的 JavaScript 中没有表示形式,从而无法进行运行时类型检查。
这种困境源于 JavaScript 的动态特性,其中接口没有定义的存在。因此,问题出现了:有没有一种方法可以对 TypeScript 中的接口进行类型检查?
playground 的自动完成功能确实揭示了一个名为 Implements 的方法,让我们想知道如何使用它。这就是自定义类型防护发挥作用的地方:
interface A { member: string; } function instanceOfA(object: any): object is A { return 'member' in object; } var a: any = { member: "foobar" }; if (instanceOfA(a)) { alert(a.member); }
通过这种方法,您可以对接口进行类型检查,而无需使用 instanceof。但是,对于更复杂的情况,请考虑使用判别器来管理您自己的判别器并确保不会发生重复。
以上是如何在 TypeScript 中执行运行时接口类型检查?的详细内容。更多信息请关注PHP中文网其他相关文章!