簡體   English   中英

如何在打字稿定義中引用打字?

[英]How to refer typings in typescript definition?

我正在寫一個打字稿定義,我的目錄是這樣的:

src
    task.ts
typings
    task.d.ts

如果我這樣寫打字:

declare namespace task {
    export interface TaskInfo {
        line: string;
    }
}

它工作正常,但現在我想引用其他類型的輸入,例如vscode ,如下所示:

declare namespace task {
    export interface TaskInfo {
        line: string;
        doc: vscode.TextDocument; // now it cannot find the module vscode
    }
}

現在我必須導入vscode ,但是當我將其更改為:

import * as vscode from "vscode"; // import here
declare namespace task {
    export interface TaskInfo {
        line: string;
        doc: vscode.TextDocument;
    }
}

我收到這樣的錯誤:

error TS2503: Cannot find namespace 'task'

如果我將其更改為:

declare namespace task {
    import * as vscode from "vscode";  // import here
    export interface TaskInfo {
        line: string;
        doc: vscode.TextDocument;
    }
}

這次我得到這樣的錯誤:

Import declarations in a namespace cannot reference a module.

那么,我應該怎樣寫我的打字?

文件中有importexport行后,該文件即成為模塊。 這意味着該文件中定義的所有內容都僅作用於該文件。 如果要從另一個文件中使用它,則需要將其導入。

當您的文件沒有任何importexport ,該文件中的變量(或類型聲明)將位於全局范圍內。

所以這 -

declare namespace task {
    export interface TaskInfo {
        line: string;
        doc: vscode.TextDocument; // now it cannot find the module vscode
    }
}

聲明一個名為task的名稱空間,該名稱空間在全局范圍內可用,並且可以從任何文件訪問。 (這可能很糟糕!名稱沖突等等)

一旦您import * as vscode from "vscode";添加import * as vscode from "vscode"; 該文件是一個模塊,現在需要從您要使用的任何文件中導出和導入task 像這樣:

import * as vscode from "vscode"; // import here
export declare namespace task {
    export interface TaskInfo {
        line: string;
        doc: vscode.TextDocument;
    }
}
/** in another file **/
import {task} from '../typings/task.d.ts';
...

這是選項1。(我認為更好)

我們還有另一個選擇。 由於在javascript世界中,模塊仍將內容放置在全局范圍內並不少見,因此typescript確實允許這樣做(但僅用於類型聲明!您將無法在模塊內實際在全局范圍內創建值)

import * as vscode from "vscode"; // import here
declare global {
  namespace task {
    export interface TaskInfo {
        line: string;
        doc: vscode.TextDocument;
    }
  }
}

您將可以從任何其他文件訪問task.TaskInfo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM