TypeScript: свойство 'range' не существует для типа - PullRequest
1 голос
/ 24 февраля 2020

Тип объявлен в 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 или что-то, что я использовал неправильно?

1 Ответ

0 голосов
/ 24 февраля 2020

TextDocumentContentChangeEvent - это один из двух типов, только один из которых имеет свойство range. Вам нужно проверить, какой у вас есть. Если вам просто нужно range, то вы можете проверить это с помощью in:

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

Поскольку * только одна сторона объединения имеет range, TypeScript достаточно умен, чтобы знать, что внутри * Блок 1009 *, полный тип change - это первый тип (тип с range, rangeLength и text), поэтому вам не обязательно проверять все из них.

...