有没有一种方法可以禁止比较任何其他类型?

时间:2020-06-22 20:44:40

标签: typescript coercion type-coercion

Typescript在检查不同类型时有非常酷的错误消息:

let strange_boolean = true;
let strange_string: string = "1";
console.log(strange_boolean == strange_string);
error: TS2367 [ERROR]: This condition will always return 'false' since the types 'boolean' and 'string' have no overlap.
console.log(strange_boolean == strange_string);
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

对于,但是此代码编译:

let strange_boolean: any = true;
let strange_string: string = "1";
console.log(strange_boolean == strange_string);

因为any可以转换为anything ...

但是,如果我想以某种方式禁用从any到任何内容的隐式转换怎么办? Typescript是否为此有任何标志? 我希望该代码仅在这种情况下才能编译:

let strange_boolean: any = true;
let strange_string: string = "1";
console.log(String(strange_boolean) == strange_string);

let strange_boolean: any = true;
let strange_string: string = "1";
console.log(Boolean(strange_boolean) == Boolean(strange_string));

1 个答案:

答案 0 :(得分:0)

不幸的是,目前没有这种可能性...(

我创建了问题https://github.com/microsoft/TypeScript/issues/39209,但是已经关闭了,因为Typescript团队不希望中断any的向后可比性,而且很不幸,因为如果他们添加此标志,则代码将变得更加安全比“ Vanilla” JavaScript中的