从打字/其他项目

时间:2016-07-29 06:30:09

标签: typescript typescript-typings

我在Visual Studio中有一个SPA应用程序,它是用TypeScript(2.0)编写的,并使用Aurelia。但我的问题并不是Aurelia或VS所特有的。

现在我想在另一个项目中为此应用程序编写插件。这些插件必须从主应用程序引用/导入类/模块。

这基本上有效,但插件项目不知道主应用程序中的类/模块。因此,尽管编译和运行正确(感谢JavaScript),IDE(Visual Studio,VS代码或NPM打字稿编译器)会抱怨无法在任何导入中找到模块' abc' 。这也意味着这些类没有Intellisense或自动完成支持。

我没有在主项目中创建声明(*.d.ts)并创建了一个构建任务来将这些声明复制到插件项目中。但他们仍然没有被认出来。 如何让插件项目识别来自声明文件的这些类?

主应用程序有一个类似 core / events.ts 的类。它的DTS可能如下所示:

export declare class Events {
    static MY_CONSTANT: string;
}

插件项目有一个插件: Plugins / PluginA / plugin-panel.ts 。它喜欢从 core / events.ts 导入Events

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

第一行( e1 )就像我在主项目中导入Events一样,当编译的javascript文件被放入应用程序时它实际上有效。但编译器抱怨它(语义错误)。

第二行( e2 )没有编译器警告但在运行时不正确。

这些打字已经复制到插件/打字/ ,这里是插件/打字/ core / 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 ,但这也无济于事。

如何设置import语句在插件开发中的工作原理并在应用程序中部署的项目?

注意:当我在主应用程序加载器配置中添加导入映射时(我config.js SystemJS我在这里使用,该行看起来像这样:"typings/core/events": "core/events",) ,主应用程序可以使用不同的导入路径。但这需要我为主项目中的每个打字稿文件设置映射。

1 个答案:

答案 0 :(得分:1)

在研究另一个import问题时,我发现了这个问题:Absolute module path resolution in TypeScript files in VSCode。请注意,我正在链接到Lekhnath的答案。

显然TypeScript 2.0有一个新的baseUrl编译器选项,它为具有相对路径的模块设置解析基路径!

所以我可以通过添加到我的compilerOptions

来解决我的打字模块/类
"baseUrl": "./Plugins/typings/"

这适用于Visual Studio,命令行编译器和VS Code(请注意,VS Code需要配置设置才能使用项目本地打字稿编译器。)