【问题标题】:TypeScript: Property 'range' does not exist on typeTypeScript:类型上不存在属性“范围”
【发布时间】:2020-02-24 14:51:24
【问题描述】:

vscode-languageserver-protocol中声明的类型:

export declare type TextDocumentContentChangeEvent = {
    /**
     * The range of the document that changed.
     */
    range: Range;
    /**
     * The optional length of the range that got replaced.
     *
     * @deprecated use range instead.
     */
    rangeLength?: number;
    /**
     * The new text for the provided range.
     */
    text: string;
} | {
    /**
     * The new text of the whole document.
     */
    text: string;
};

change 实例为TextDocumentContentChangeEvent,当我使用change.range 时,VSCode 发布错误:Property 'range' does not exist on type '{ text: string; }'

如何检查change.range 或我用错了什么?

【问题讨论】:

    标签: typescript visual-studio-code vscode-extensions


    【解决方案1】:

    TextDocumentContentChangeEvent 是两种类型之一,其中只有一种具有range 属性。你需要检查你有哪种。如果您只需要range,那么您可以使用in 进行检查:

    if ("range" in change) {
        // You can use change.range here
    }
    

    由于联合体只有一侧有range,TypeScript 足够聪明地知道在if 块内,change 的完整类型是第一个类型(具有范围、范围长度和文本的类型) ),因此您不必检查所有这些。

    【讨论】:

      【解决方案2】:

      TextDocumentContentChangeEvent 命名空间中现在有 2 个方法:

      isIncrementalisFull,检查change是否有rangerangeLength或只有text

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 2018-08-17
        • 1970-01-01
        • 2023-02-06
        • 2019-06-28
        • 1970-01-01
        • 1970-01-01
        • 2018-11-09
        • 2021-07-11
        相关资源
        最近更新 更多