首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型保护:使用in操作符

类型保护:使用in操作符
EN

Stack Overflow用户
提问于 2019-08-21 15:12:28
回答 1查看 10K关注 0票数 7

我正在学习TypeScript,并从官方DOCS那里练习“类型警卫”

我正在用TypeScript 3.5.3测试提供的示例(或多或少):

代码语言:javascript
复制
function exec(strOrNum: string | number) {
    if ("substring" in strOrNum) {
        return strOrNum.substring(1);
    }
    return strOrNum.toExponential(2);
}

但是,VSCode正在处理以下错误:

'in‘表达式的右侧必须是'any’类型、对象类型或类型parameter.ts(2361)。

我不明白,知道吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-21 15:15:41

如果指定的属性位于指定的对象或其原型链中,则运算符返回true

这意味着它操作对象(或数组),而不是字符串。

如果要添加类型保护以区分stringnumber,则必须使用typeof

代码语言:javascript
复制
function exec(strOrNum: string | number) {
    if (typeof strOrNum === "string") {
        return strOrNum.substring(1);
    }
    return strOrNum.toExponential(2);
}

如果有两个接口的联合,则可以使用in操作符:

代码语言:javascript
复制
interface A {
    a: string;
}

interface B {
    b: number;
}


function test(arg: A | B): string {
    if ('a' in arg) {
        return arg.a;
    }
    return arg.b.toFixed(2);
}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57594637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档