作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个函数,它使用两个接口(interface)之一返回值,如下所示:
interface K {
A:number;
NUM:number;
}
interface L {
A:string;
STR:string;
}
function FUN():K|L { }
var x:K|L = FUN();
但我无法使用像这样的类型保护来访问非共享属性:
if(typeof x.A === 'string'){
console.log(x.STR) // Property 'STR' does not exist on type 'K | L'
}
尽管 if 子句确实区分了这两种类型。我知道我可以使用 as
运算符和变量赋值来向编译器指示类型,如下所示:
if(typeof x.A === 'string'){
var y = x as L;
console.log(y.STR) // OK
}
但这似乎有点笨拙,因为这会在生成的 js 代码中添加不必要的 var
语句和赋值:
function FUN() { }
var x = FUN();
if (typeof x.A === 'string') {
var y = x; // unnecessary...
console.log(y.STR);
}
有没有办法在JS代码中不加var y=x;
来表示这种情况下的类型?
最佳答案
是的,TypeScript 支持类型转换。你应该能够做到:
if(typeof x.A === 'string'){
console.log((<L>x).STR);
}
关于typescript - 在不分配新变量的情况下在 TypeScript 中键入断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35954695/
我是一名优秀的程序员,十分优秀!