typescript - TypeScript 类型保护和“仅指一种类型,但在这里用作值”。
问题描述
我正在使用 Typescript 3.2.2 并且无法实现类型保护的最基本实现:
interface Bird {
fly(): boolean;
}
interface Fish {
swim(): boolean;
}
function swimIfYouCan(x: Fish | Bird) {
if ((<Fish>x).swim) {
return true
}
}
这Error:(50, 11) TS2693: 'Fish' only refers to a type, but is being used as a value here.
在 WebStorm 和SyntaxError: /Users/sea-kent/git/docket-management/webapp/src/App.tsx: Unexpected token (51:8)
从yarn
. 启用此语法是否需要配置?
解决方案
通过检查属性的存在来进行模式匹配的推荐方法是in
操作符:
interface Bird {
fly(): boolean;
}
interface Fish {
swim(): boolean;
}
function move(x: Fish | Bird) {
if ("swim" in x) {
return x.swim();
} else {
return x.fly();
}
}
通过使用in
运算符,您可以避免断言。
推荐阅读
- java - RecyclerView 末尾的空白处
- rest - 如何保护基于 Firebase Cloud Functions 的 REST API
- html - 如何限制表单名称字段中的特殊字符、下划线、空格(输入标签)?
- asciidoctor - 无法使用 Asciidoctor pdf 渲染页脚
- php - 从本地 URL 上传到服务器
- asp.net-core - IdentityServer4 Client prop Claim 无法在 MongoDB 中设置
- firebase - React Native:管理 RNFirebase 上的通知
- c# - await 阻塞请求
- python - 使用 API 在 gitlab 中添加项目头像
- python - Heroku pip install 无法安装 billy-api