【问题标题】:How do I interpolate variable values in the javascript or typescript string?如何在 javascript 或 typescript 字符串中插入变量值?
【发布时间】:2018-05-08 15:28:19
【问题描述】:

变量文件:

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}

标签: javascript angular typescript interpolation template-strings


【解决方案1】:

要使用插值字符串,您需要像在第二个 sn-p 中那样使用 `` 字符串分隔符。如果您已经使用非插值字符串来保存设置的值,则无法使用插值功能对其进行插值(您可以使用正则表达式执行替换,但这有点混乱)。

最简单的解决方案是将字段设为函数,并将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 现在将是一个函数,它将构造字符串所需的参数作为参数。这样,字符串所需的参数就清晰且类型安全。

【讨论】:

  • public static string_value: string = (id: string) => vikas/${id}/data;它抛出错误类型'(id:字符串)=>字符串'不可分配给类型'字符串'。
  • @VIKASKOHLI 它不再是字符串,而是返回字符串的函数。去掉:string不是必须的,类型会根据指定的箭头函数来推断
  • 好的。我会将此标记为答案。感谢您宝贵的时间
【解决方案2】:

你可以试试:

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

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

【讨论】:

  • 我不想为此使用任何正则表达式模式。我只想做插值
【解决方案3】:
     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'。
  • 请看我新更新的代码,下面我们提交了
  • 不会改变id。此外,我们使用了两个变量。那不是我想要使用的
  • 如果你不改变id那么直接把它放在string_value中@VIKASKOHLI
  • 如果我不改变,那么我不会问这个问题。因为那时它是一个静态值,我可以像“/vikas/12345/data”一样直接存储
猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
相关资源
最近更新 更多