2016-07-29 82 views
0

我在Visual Studio中有一個用TypeScript(2.0)編寫並使用Aurelia的SPA應用程序。但我的問題不是特定於Aurelia或VS.從類型/其他項目中引用/導入類

現在我想寫一個插件這個應用程序在另一個項目中。這些插件必須從主應用程序中引用/導入類/模塊。

這基本上工作,但插件項目不知道從主應用程序的類/模塊。因此,雖然編譯和運行正確(感謝JavaScript),但IDE(Visual Studio,VS Code或NPM打字稿編譯器)卻抱怨在任何導入時都找不到模塊'abc'。這也意味着這些類沒有智能感知或自動完成支持。

我沒有在主項目中創建聲明(*.d.ts),並創建了一個構建任務,將這些任務複製到插件項目中。但他們仍然沒有得到承認。 如何讓插件項目識別來自聲明文件的這些類?

主要應用程序有一個類似核心/ events.ts。其DTS可能是這樣的:

export declare class Events { 
    static MY_CONSTANT: string; 
} 

插件項目在這裏有一個插件:插件/ PluginA /插件,panel.ts。它喜歡從核心導入Events/events.ts

import { Events as e1 } from 'core/events'; 
import { Events as e2 } from 'typings/core/events'; 

第一行(E1)就像是我的主要項目導入Events當JavaScript文件被刪除編譯它的實際工作進入應用程序。但編譯器抱怨它(語義錯誤)。

第二行(e2)沒有編譯器警告,但在運行時不正確。

的分型已經被複制到插件/分型/,這裏插件/分型/核心/ events.d.ts。只有插件文件夾包含TypeScript文件,其餘項目是C#。有一個tsconfig.json在根文件夾,這將是利益我想:

{ 
    "version": "2.0.0", 
    "compileOnSave": false, 
    "compilerOptions": { 
    "rootDir": "./", 
    "sourceMap": true, 
    "target": "es6", 
    "module": "amd", 
    "declaration": false, 
    "noImplicitAny": false, 
    "noResolve": true, 
    "removeComments": true, 
    "noLib": false, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true 
    }, 
    "filesGlob": [ 
    "./Plugins/**/*.ts", 
    "./Plugins/typings/**/*.d.ts" 
    ], 
    "exclude": [ 
    "node_modules" 
    ], 
    "atom": { 
    "rewriteTsconfig": false 
    } 
} 

我已經嘗試設置rootDir./Plugins但這並沒有幫助。

如何設置導入語句在插件開發中的作用相同並在應用程序中部署的項目?

注:當我添加映射在主應用程序的配置進口(這是config.jsSystemJS我在這裏使用,該行如下所示:"typings/core/events": "core/events",),主要應用可以與不同的導入路的工作。但是這需要我爲主項目中的每個打印文件設置一個映射。

回答

1

在研究另一個import問題時,我發現了這個問題:Absolute module path resolution in TypeScript files in VSCode。請注意,我鏈接到Lekhnath的答案。

顯然TypeScript 2.0有一個新的baseUrl編譯器選項,它爲具有相對路徑的模塊設置解析基路徑!

所以我可以通過添加以解決我的分型模塊/類我compilerOptions

"baseUrl": "./Plugins/typings/" 

這個工程在Visual Studio中的命令行編譯器和VS代碼(注意,VS代碼需要配置設置使用項目本地打字稿編譯器)。