所以我最近开始学习TypeScript,我一直在尝试加入typeguards,但它们似乎不起作用。所以我的布局方式是我有一个名为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))这样的颜色对象调用它,我也会得到false,即使它检查了所有的属性。有没有人知道为什么会发生这种情况,以及我如何才能修复它?
发布于 2020-07-30 07:03:07
好吧,看起来我只是在装傻,我需要使用for...of循环而不是for...in循环
发布于 2020-07-30 07:04:42
bug在这里:
for(let prop in props){ props是一个数组,并且for/in迭代键,而不是值。所以for (let prop in props)是指prop是"0","1","2"等。
将其更改为通过for/of迭代值,它应该会像您预期的那样工作。
for(let prop of props){https://stackoverflow.com/questions/63163596
复制相似问题