为什么 TypeScript 不将数字强制转换为类型化属性中的字符串



我今天遇到了一个错误,这让我陷入了很多挖掘和困惑。这一切都是由我的假设引起的,即当 TypeScript 类中的属性被定义为 string 时,TypeScript 将抛出错误或将另一种类型转换为string表示形式。

我希望以下内容要么在类构造中抛出错误,要么将参数转换为字符串。

class A { 
    constructor(public str: string) { 
        console.log(typeof (str));
        console.log(typeof (this.str));
    }
    t() { 
        return typeof (this.str);
    }
}
const a: A = new A(5 as any);
const t = a.t();
// t is now 'number'!!!!

游乐场链接

当查看生成的JavaScript时,似乎很明显这是应该发生的事情,但我认为TypeScript会更健壮,并且此功能将是设计使然。

为什么 TypeScript 不将我的数字类型转换为字符串?

使用 as 强制转换变量应该被认为是危险的。这是一个类型断言 - 你告诉Typescript编译器你比它更了解对象的类型是什么。如果你对Typescript编译器撒谎,它就不能帮助你保证程序的安全。

更糟糕的是,您在这里使用的是any类型,这是一种非常宽松的类型。如果强制转换为任何其他类型,包括 {} ,则会出现编译器错误。但是,any可以分配给任何类型而不会出错。

最新更新