为什么null / undefined检查在Typescript中具有可扩展props接口的类中不起作用

时间:2019-06-26 08:46:04

标签: reactjs typescript package.json tslint tsconfig

空/未定义检查在接受通用道具的类中不起作用。

interface IFooProps {  
    minDate?: Date;
}

1-调用createNewDateWithMonth5函数时,这会在updateDate函数中给出“无法分配给类型为“日期”的未定义”错误

class Foo<P extends IFooProps> extends React.Component<P> {  

    updateDate() {  
        if (this.props.minDate) {  
            this.createNewDateWithMonth5(this.props.minDate)
        }
    }

    createNewDateWithMonth5(date: Date): Date {  
        const newDate = new Date(date);
        newDate.setMonth(5);
        return newDate;
    }
}

2-这没有错误,并且可以正常工作。

class Foo extends React.Component<IFooProps> {  

    updateDate() {  
        if (this.props.minDate) {  
            this.createNewDateWithMonth5(this.props.minDate)
        }
    }

    createNewDateWithMonth5(date: Date): Date {  
        const newDate = new Date(date);
        newDate.setMonth(5);
        return newDate;
    }
}

我期望1像2一样正常工作。 为什么null / undefined检查在带有可扩展道具的可扩展类中不起作用。

这里是沙盒link,用于重现错误。

1 个答案:

答案 0 :(得分:0)

嗯,不确定,看起来确实有些奇怪,但是另一方面,我并不感到惊讶-永远都不知道超类中发生了什么。

我会缓存道具,然后对缓存的值执行相同的操作。这应该很简单。

updateDate() {
    const { minDate } = this.props
    if (minDate ) {  
        this.createNewDateWithMonth5(minDate)
    }
}

这种“解构”语法在react中也非常流行,因为它无需编写每个引用的“ props”或“ state”,从而大大缩短了代码。