如何在 JavaScript 或 TypeScript 字符串中插入变量值?

7

变量文件:

export class VariableSettings {

   public static string_value: string = 'vikas/${id}/data';


}

其他文件。

import {VariableSettings} from './variables';


    getData(id:string ){
      console.log(`${VariableSettings.string_value}`, `${id}`); 

      // it prints vikas/${id}/data abcd11123

    }`

现在我想要的结果是 "vikas/abcd11123/data"。那么我该如何将id注入到这个字符串中?关于此事的任何建议都将不胜感激。谢谢。

我认为这很复杂,但与其插入字符串,为什么不直接传递一个函数,如:string_value(id){return \vikas/${id}/data`}。在你的情况下,它需要另一种处理方式,比如使用正则表达式匹配${id}`。 - Radonirina Maminiaina
3个回答

10

要使用插值字符串,您需要像在第二个代码段中一样使用``字符串分隔符。如果您已经使用非插值字符串来保存设置的值,那么您无法使用插值功能来插入该值(您可以使用正则表达式进行替换,但有些凌乱)。

最简单的解决方案是将字段设置为函数,并将id作为参数。

export class VariableSettings {
    public static USER_BOOKINGS = (id: number) => `vikas/${id}/data`;
}
console.log(`${VariableSettings.USER_BOOKINGS(10)}`);
console.log(VariableSettings.USER_BOOKINGS(10)); // Or no interpolation at call site, not needed anymore if you just need the single value

USER_BOOKINGS 现在将成为一个函数,它将以构建字符串所需的参数作为参数。这样可以清晰地了解字符串所需的参数,并保证类型安全。


公共静态string_value: string = (id: string) => vikas/${id}/data; 它抛出错误类型'(id: string) => string'无法分配给类型'string'。 - VIKAS KOHLI
@VIKASKOHLI 现在不再是一个字符串,它是一个返回字符串的函数。删除 :string 是不必要的,类型将根据分配的箭头函数推断。 - Titian Cernicova-Dragomir
好的。我会把这标记为答案。感谢您宝贵的时间。 - VIKAS KOHLI

2

你可以尝试以下方法:

public static string_value: string = 'vikas/id/data';

let re = /id/gi; 
let newstr = `${VariableSettings.USER_BOOKINGS}`.replace(re, `${id}`);
console.log(newstr); 

我不想使用任何正则表达式模式。我只想进行插值。 - VIKAS KOHLI

1
     export class VariableSettings {
       id:number;
       public static string_value: string;


    constructor(){
      this.id = 123456
      VariableSettings.string_value = `vikas/${this.id}/data`;
}
  ngOnInit() {
    console.log(VariableSettings.string_value);
  }
    }

错误:找不到名称 'id'。 - VIKAS KOHLI
请查看我最新更新的代码,我们已经提交了。 - Omkar Jadhav
它不会改变ID。此外,我们正在使用两个变量。那不是我想要使用的。 - VIKAS KOHLI
如果您不更改ID,则直接将其放入string_value @VIKASKOHLI中。 - Omkar Jadhav
如果我不改变,那么我就不会问这个问题。因为它是一个静态值,我可以直接存储为"/vikas/12345/data"。 - VIKAS KOHLI
那么问题的确切是什么?@VIKASKOHLI - Omkar Jadhav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接