如何在运行时检查类型是否具有索引签名

时间:2016-10-18 17:10:34

标签: typescript

我不确定这是否有意义,因为许多类型都是JavaScript中的对象,但我们走了:

我想实现一个type guard,它会检查类型是否实现index signature。如何做到这一点?

换句话说,如何实现这个功能的主体:

function hasIndexSignature(o: complexunioninterface | { [index: string]: string }): o is { [index: string]: string } {
    return /* Help? */;
}

考虑到许多类型是对象,这是正确的实现:

function hasIndexSignature(o: complexunioninterface | { [index: string]: string }): o is { [index: string]: string } {
    return typeof o === "object";
}

一种方法是为complexunioninterface实现一个类型保护并且只是否定它,但我感兴趣的是如果为索引签名实现类型保护会有意义并且是否可能。

1 个答案:

答案 0 :(得分:1)

  

我很感兴趣如果为索引签名实现类型保护是有意义的,如果可能的话。

自定义类型防护是设计用于编译器无法推断您对对象的高级知识的情况。

实际上,由您来决定测试的数量是多少。我会说你的想法是implement a type guard for complexunioninterface and just negate that,