typescript 在字符串插值中使用非字符串变量时,如何生成警告/错误?

but5z9lq  于 2023-02-05  发布在  TypeScript
关注(0)|答案(2)|浏览(146)

TypeScript不会为以下代码生成任何错误:

const maybe_a_string: undefined | string = undefined;
const false_or_string: false | string = false;

// I'd like the following to produce an error/warning...
const message_string = `Some readable string info should be here: ${maybe_a_string}  ${false_or_string}`;

是否有某种设置可以打开,或者有其他简单的方法来编写最后一行,警告我不要像这样在字符串中使用非字符串变量?(但不需要为每个单独Assert的子字符串添加额外的代码行)
我猜它把它们当作罚款,因为一些类型,如布尔值,数字和杂项对象有一个.toString()方法...
但是特别是在undefined的情况下(它实际上没有.toString()方法)--这是很常见的,因为只有在调试的时候你才真正想看到字符串“undefined”在另一个字符串中,但是有很多这样的bug,最终用户会无意中看到“hello undefined”这样的东西。

hm2xizp9

hm2xizp91#

就我个人而言,我会把字符串模板做成一个函数来处理这个问题,这样你就可以指定参数必须是字符串。

const createMessageString = (first: string, second: string): string => {
    return `Some readable string info should be here: ${first}  ${second}`;
}

const message_string = createMessageString( maybe_a_string, false_or_string );
// will give an error unless types are refined
idfiyjo8

idfiyjo82#

投票支持https://github.com/microsoft/TypeScript/issues/30239 [将模板文字插值表达式限制为字符串]
此外,您可以从问题注解中尝试解决方法。

相关问题