如何转义特殊字符名称?

How can I escape special characters names?

我正在记录从 CSV 解析的数据,因此 属性 名称可能包含空格、#

如何记录它们?

/**
 * @typedef {Object} EmployeeCsv
 * @property {string} Emp#
 * @property {string} First Name
 */
console.log(emp["Emp#"]);
[tsserver] Property 'Emp#' does not exist on type 'EmployeeCsv'. Did you mean 'Emp'? [E]

我试过 \'",但它们似乎没有效果或导致“预期标识符”错误。

我能够使用 Typescript 4.3.5 在 Playground 中重现此内容。我无法使用您描述的 @typedef {Object} EmployeeCsv 语法使语法工作。与 jsdoc/jsdoc#1468 一样,似乎 VSCode 和 Typescript 可能不符合基于 unicode-escape 的规范。

/**
 * @typedef {object} EmployeeCsv
 * @property {string} Emp#
 * @property {string} "First Name"
 */

function demo(/** @type EmployeeCsv */ emp) {
  // fails
  emp["Emp#"] = "abc";
  emp["First Name"] = "def";
}

我能够使用 Closure Compiler wiki, omitted entirely from the @typedef page on jsdoc.app 中描述的“新 @typedef 语法”。

/**
 * @typedef {{
 *   "Emp#": string,
 *   "First Name": string,
 * }}
 */
let EmployeeCsv2;

function demo2(/** @type EmployeeCsv2 */ emp) {
  emp["Emp#"] = "abc";
  emp["First Name"] = "def";
}

(请注意,这两个示例都让 TSC 在“JS 模式”下工作,相当于解析具有 .js 扩展名的文件。这是在左上角的 Config 设置中的 TS Playground 中设置的。)

Playground Link (JS)


当然,在Typescript文件中,你可以将JSDoc格式转换为Typescript接口定义。

interface EmployeeCsv {
  "Emp#": string,
  "First Name": string,
}

function demo(emp: EmployeeCsv) {
  emp["Emp#"] = "abc";
  emp["First Name"] = "def";
}

Playground Link (TS)