当前位置: 首页 > 知识库问答 >
问题:

检查对象是否在运行时使用TypeScript实现接口

宇文德明
2023-03-14
interface EngineConfig {
    pathplanner?: PathPlannerConfig;
    debug?: DebugConfig;
    ...
}

interface PathPlannerConfig {
    nbMaxIter?: number;
    nbIterPerChunk?: number;
    heuristic?: string;
}

interface DebugConfig {
    logLevel?: number;
}

...

问题:有没有一种方法可以使用这个声明来检查我加载的文件的正确性?我没有意外的财产?

共有1个答案

曹奇文
2023-03-14

“有”办法,但你得自己去实施。它被称为“用户定义类型保护”,看起来如下所示:

interface Test {
    prop: number;
}

function isTest(arg: any): arg is Test {
    return arg && arg.prop && typeof(arg.prop) == 'number';
}

当然,istest函数的实际实现完全取决于您,但好的方面是它是一个实际的函数,这意味着它是可测试的。

现在,在运行时,您将使用istest()来验证对象是否尊重接口。在编译时,typescript将获得保护,并按预期处理后续使用,即:

let a:any = { prop: 5 };

a.x; //ok because here a is of type any

if (isTest(a)) {
    a.x; //error because here a is of type Test
}
 类似资料:
  • 问题内容: 我在运行时加载JSON配置文件,并使用接口定义其预期结构: 由于可以使用自动填充等功能,因此可以方便地访问各种属性。 问题: 有没有一种方法可以使用此声明来检查我加载的文件的正确性? 即我没有意外的属性? 问题答案: 没有。 当前,类型仅在开发和编译期间使用。类型信息不会以任何方式转换为已编译的JavaScript代码。

  • 我在TypeScript中使用一个接口来定义一个函数,该函数仅在扩展基类的一些类上可用。这是我到目前为止的代码的简化版本: 现在,问题是我会添加更多的“行走”动物,这样移动动物的功能就会变得太大而无法控制。我想做的事情是这样的: 但是,“implements”检查不起作用,在使用接口时,我找不到与“instanceof”等效的。在Java中,“instanceof”的使用似乎可以在这里使用,但Ty

  • 有没有办法,我如何检测某个对象是否实现了某个接口?

  • 问题内容: 如何检查某个类是否实现接口?当有: 如何检查是否实现接口? 该方法是否被正确覆盖,因此可以返回新创建的方法? 问题答案: 对于一个实例 然后做 对于Class实例

  • 本文向大家介绍JavaScript / Typescript对象是否为空检查?,包括了JavaScript / Typescript对象是否为空检查?的使用技巧和注意事项,需要的朋友参考一下 对于null检查,可以使用!健康)状况。 示例 以下是代码- 要运行以上程序,您需要使用以下命令- 在这里,我的文件名为demo305.js。 输出结果 这将产生以下输出-

  • 我试图找到一种方法来传递一个对象来发挥作用,并在运行库中检查它的类型。这是一个伪代码: 但是总是返回,我无法找到获取或的真正类型的方法。也不起作用,返回了相同的内容。