首页 > 解决方案 > 即使类型正确,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它已经检查了所有属性。有谁知道为什么会发生这种情况以及我如何能够解决它?

标签: typescript

解决方案


好的,看来我只是愚蠢,我需要使用for...of循环而不是for...in循环


推荐阅读