我正在学习TypeScript,并从官方DOCS那里练习“类型警卫”
我正在用TypeScript 3.5.3测试提供的示例(或多或少):
function exec(strOrNum: string | number) {
if ("substring" in strOrNum) {
return strOrNum.substring(1);
}
return strOrNum.toExponential(2);
}但是,VSCode正在处理以下错误:
'in‘表达式的右侧必须是'any’类型、对象类型或类型parameter.ts(2361)。
我不明白,知道吗?
发布于 2019-08-21 15:15:41
如果指定的属性位于指定的对象或其原型链中,则运算符返回
true。
这意味着它操作对象(或数组),而不是字符串。
如果要添加类型保护以区分string和number,则必须使用typeof
function exec(strOrNum: string | number) {
if (typeof strOrNum === "string") {
return strOrNum.substring(1);
}
return strOrNum.toExponential(2);
}如果有两个接口的联合,则可以使用in操作符:
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);
}https://stackoverflow.com/questions/57594637
复制相似问题