我使用的是Typescript 3.2。2、无法实现最基本的类型防护:
interface Bird {
fly(): boolean;
}
interface Fish {
swim(): boolean;
}
function swimIfYouCan(x: Fish | Bird) {
if ((<Fish>x).swim) {
return true
}
}
这将产生错误:(50,11)TS2693:'鱼'仅指一种类型,但在这里用作值。(51:8)
源自yarn
。是否需要配置来启用此语法?
对于你的问题,我想到了三种可能的方法。
>
如果你想转换它并直接使用它,你必须使用作为
运算符(如@jonrSharpe在注释中提到的),所以例如(x作为鱼)。
使用
操作符中的检查它是否可用,例如
if('swim'在x中)
最后但并非最不重要的一点(我认为这是最好的情况),只需执行一个check实例来检查您得到了什么实例:
if(Fish的x实例)
编辑:没有充分阅读问题,您无法在运行时检查接口。但在接口顶部创建一个类并没有什么害处
通过检查属性的存在来进行模式匹配的推荐方法是中的:
interface Bird {
fly(): boolean;
}
interface Fish {
swim(): boolean;
}
function move(x: Fish | Bird) {
if ("swim" in x) {
return x.swim();
} else {
return x.fly();
}
}
通过在
操作符中使用,可以避免断言。
本节介绍的类型保护 TypeScript 类型检查机制的第二个部分,我们可以通过 typeof、instanceof、in 和 字面量类型 将代码分割成范围更小的代码块,在这一小块中,变量的类型是确定的。 1. 慕课解释 类型保护是指缩小类型的范围,在一定的块级作用域内由编译器推导其类型,提示并规避不合法的操作。 2. typeof 通过 typeof 运算符判断变量类型,下面看一个之前介绍函数重
我试图为我的AWS Lambda使用Typescript,我在使用promise时遇到了以下错误。 我尝试在代码中使用以下变体 我尝试了I Get中提到的解决方案:[ts]'Promise'只引用类型,但在这里被用作值,但没有运气。
我试图用一种方法扩展Puppeter的类ElementHandle。我已经检查了一些例子,并编写了简单的代码,就像这个答案一样。 但是VSCode显示了我更改ElementHandle prototype所在行的一个错误: “ElementHandle”仅引用类型,但在此处用作值。ts(2693) 我怎么才能修好它? 我的代码: ElementHandle类:https://github.com/
给出了以下错误: 仅引用类型,但在此处用作值。 这是可以理解的,因为它是对象的属性。 如何使用指定类型,如one?
我使用TypeScript,并有一个情况下,一个函数返回两个类型的联合。它可以返回字符串或模型,但我不知道如何获取类型并根据返回的类型执行操作。 我该怎么做这样的事?在本例中,字符串和IMyModel如何用作值(如错误消息所示)?这个错误使我感到困惑。 我在使用的行中得到以下可视化工作室代码中的静态错误: “string”仅引用类型,但在此处用作值。ts(2693) “IMyModel”仅引用类型