【发布时间】:2020-07-29 22:50:38
【问题描述】:
所以我最近开始学习 TypeScript,我一直在尝试包含 typeguard,但它们似乎不起作用。所以我的布局方式是我有一个名为IColor 的界面设置如下:
interface IColor {
r:number;
g:number;
b:number;
}
我有一个名为 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.IsColor(new Color(100, 0, 0)) 这样的 Color 对象调用它时,我也会得到 false,即使它已经检查了所有属性。有谁知道为什么会发生这种情况以及我该如何解决?
【问题讨论】:
标签: typescript