代码之家  ›  专栏  ›  技术社区  ›  fferri

输入方括号名称?

  •  1
  • fferri  · 技术社区  · 6 年前

    我在读 language server protocol (LSP) specification 我发现这个定义:

    export interface WorkspaceEdit {
        /**
         * Holds changes to existing resources.
         */
        changes?: { [uri: string]: TextEdit[]; };
    
        /**
         * An array of `TextDocumentEdit`s to express changes to n different text documents
         * where each text document edit addresses a specific version of a text document.
         * Whether a client supports versioned document edits is expressed via
         * `WorkspaceClientCapabilities.workspaceEdit.documentChanges`.
         */
        documentChanges?: TextDocumentEdit[];
    }
    

    changes 菲尔德,这是打字错误,还是什么意思?

    你能给一个不懂typescript的人解释一下吗?他正在尝试用另一种编程语言实现这些消息。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Titian Cernicova-Dragomir    6 年前

    { [uri: string]: TextEdit[]; }; 定义一个类型,该类型可通过 string 索引返回 TextEdit[] . uri 只是索引参数的名称。

    前任:

    interface TextEdit { TextEdit : true } /// dummy    
    export interface WorkspaceEdit {
        /**
         * Holds changes to existing resources.
         */
        changes?: { [uri: string]: TextEdit[]; };
    
    }
    
    let w: WorkspaceEdit;
    let t = w.changes['test'] // t is of type TextEdit[]
    let f: number[] = w.changes['test'] // error can't assign TextEdit[] to number[]
    
    w.changes['test'] = "" // also error since we are assigning a string to the object  
    

    游乐场 link

        2
  •  0
  •   Webvoid    6 年前

    这意味着changes是一个可以将任何字符串作为键的对象。没有这个,你就做不到 WorkspaceEdit.changes['anything'] = [...] . 无论如何,请记住,更改中的每个对象都必须是 TextEdit .