使用私有字段 (#) 作为元素的类型

Using a private field (#) as the typeof for an element

提问人:Ali Ehyaie 提问时间:5/21/2023 最后编辑:Ali Ehyaie 更新时间:5/22/2023 访问量:32

问:

检查此代码

interface PriceFormatOptions {
  unit: string;
}
export default class PriceHelper {
  /**
   * Adds unit and separates thousands
   */
  static format(
    price: Parameters<typeof PriceHelper.#separateThousands>[0],
    options: PriceFormatOptions = {} as PriceFormatOptions
  ) {
    let unit = options.unit || "تومان";

    const separatedPrice = this.#separateThousands(price);
    if (unit) unit = ` ${unit}`;

    return separatedPrice + unit;
  }

  /**
   * Converts numeral prices to persian words
   */
  static toWords() {}

  static #separateThousands(price: string | number) {
    return String(price || 0).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  }
}

当我像这样分开成千上万的人时

static separateThousands(price: string | number) {
return String(price || 0).replace(/\B(?=(\d{3})+(?!\d))/g, ",");

}

并像这样使用它

price: Parameters<typeof PriceHelper.separateThousands>[0],

一切都很好,但是当我像这样将其用作私有字段(带有#)时

price: Parameters<typeof PriceHelper.#separateThousands>[0],

TypeScript 抱怨此错误

ESLint:解析错误:需要标识符。

我不知道我该如何解决这个问题

JavaScript ReactJS TypeScript Next.js 私有方法

评论

0赞 jcalz 5/22/2023
鉴于 ms/TS#47595 尚未解决,您需要解决它。一种方法是在其他地方定义类型,例如在单独的类型别名中或在单独的类型别名中定义类型,然后在 中重用它,如此 playground 链接所示。这是否完全解决了这个问题?如果是这样,我会写一个答案来解释;如果没有,我错过了什么?format#separateThousands

答:

0赞 adam.k 5/22/2023 #1

我认为 eslint,只是不明白.如果不需要速记,可以键入#seperateThousandsprivate static seperateThousands