typescript - 即使类型正确,TypeScript 自定义类型保护也会返回 false
问题描述
所以我最近开始学习 TypeScript,我一直在尝试包含 typeguard,但它们似乎不起作用。所以我布置它的方式是我有一个名为 setup 的界面IColor
,例如:
interface IColor {
r:number;
g:number;
b:number;
}
我有一个名为 setup 的具体实现Color
,例如:
class Color implements IColor {
static IsColor = (obj:any):obj is IColor => typeCheck<IColor>(obj, "r", "g", "b");
r:number;
g:number;
b:number;
... (rest of the class)
}
typeCheck<T>
看起来像这样:
export const typeCheck = <T>(objToCheck:any, ...props:Array<keyof T>):objToCheck is T => {
let isType:boolean = true;
for(let prop in props){
if(!propertyCheck(objToCheck, prop)){
isType = false;
}
}
return isType;
}
export const propertyCheck = <T>(objToCheck:any, prop:keyof T):objToCheck is T => (objToCheck as T)[prop] !== undefined;
但是当我打电话时,Color.IsColor({r: 100, g: 0, b: 0})
或者即使我用一个 Color 对象来调用它,Color.IsColor(new Color(100, 0, 0))
即使false
它已经检查了所有属性。有谁知道为什么会发生这种情况以及我如何能够解决它?
解决方案
好的,看来我只是愚蠢,我需要使用for...of
循环而不是for...in
循环
推荐阅读
- python - python3在十六进制中的奇怪行为
- reactjs - 有一个带有路由和路由的反应应用程序在刷新时出错。可能是什么原因?
- php - 将 URL 向上重写一个文件夹
- c# - 如果存在于 DataGridView 单元格上
- django - Django:UpdateView 如何更改 ModelForm 中排除的字段的值?
- python - 为什么 Python Flask-User with MongoDB 会抛出与非 MongoDB 版本相关的错误?
- java - 从 JDBC 模板获取连接时出错
- android - 实施 'com.readystatesoftware.sqliteasset:sqliteassethelper:+' 不起作用
- git - checkout+merge 和 pull 的区别
- php - SQL灵活查询结果