找出对象是否具有特定键

时间:2019-04-05 17:51:12

标签: typescript

const a = {
    b: "hello",
    c: "world",
}

function f(x: keyof typeof a | { x: string }) {

}

function g(x: string) {
    if (a.hasOwnProperty(x)) {
        return f(x);
    } else {
        return f({ x });
    }
}

g函数接受字符串x。如果xa的键("b""c"),则它应使用f作为唯一参数来调用x函数。如果x不是a的键,则g函数必须使用其中带有f字符串的对象来调用x函数。

但是,此代码在调用f(x)函数时出错。看来TypeScript无法理解,在使用hasOwnProperty之后,x字符串是a的键。是否可以通过某种方式使TypeScript理解 而无需使用类型声明?

TypeScript Playground Link

1 个答案:

答案 0 :(得分:4)

我建议使用type guard

function isInA(x: string): x is keyof typeof a {
    return a.hasOwnProperty(x);
}

if (isInA(x)) {
    return f(x);
}