【问题标题】:How can I escape special characters names?如何转义特殊字符名称?
【发布时间】:2021-08-27 08:42:14
【问题描述】:

我正在记录从 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 jsdoc


    【解决方案1】:

    我能够使用 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 中描述的“新@typedef 语法”一起工作,在the @typedef page on jsdoc.app 中完全省略。

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

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

    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)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多