[英]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.
那么,我應該怎樣寫我的打字?
文件中有import
或export
行后,該文件即成為模塊。 這意味着該文件中定義的所有內容都僅作用於該文件。 如果要從另一個文件中使用它,則需要將其導入。
當您的文件沒有任何import
或export
,該文件中的變量(或類型聲明)將位於全局范圍內。
所以這 -
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.