2016-07-29 118 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代码需要配置设置使用项目本地打字稿编译器)。