【问题标题】:Typescript declaration: why does this throw an error打字稿声明:为什么这会引发错误
【发布时间】:2017-02-14 16:26:57
【问题描述】:

我只是在学习 Typescript。我正在用typescript 2 编写一个Angular 2 应用程序,使用SystemJS 0.15.31 作为我的模块加载器。

我想定义应用范围的常量。在一个文件中,并根据需要将其导入我的组件中。这就是我所拥有的:

root/systemjs.config.js

System.config({
    map:{
        'app': 'dist',
        'config': 'dist/config',
        ...
    }
});

root/dev/config.ts

export module Config {
    var version:string = '1';
}

root/dev/app/app.component.ts

import {Config} from 'config';
...
export class AppComponent {
    ...
    version = Config.version;
}

转译成 Javascript 后,.ts 文件被放入dist/。但是,typescript 编译器在 app.component.ts 的第一行显示此错误,而在浏览器中,AppComponent 看不到 Config.version

错误 TS2307:找不到模块“配置”。

我的语法有什么问题?

【问题讨论】:

    标签: angular typescript module systemjs


    【解决方案1】:

    我认为您的问题是 SystemJS 期望 dist/config 是一个文件夹。

    为文件路径添加扩展名,如下所示:

    map: {
        ...
        'config': 'dist/config.js' 
        ...
    }
    

    PS: export module 不是打字稿。我想你想要:

    export const Config = {
       ...
    }
    

    【讨论】:

    • 谢谢。我做出了改变。在同一 import {Config} from 'config' 行上引发相同的错误。如果我更改为使用相对路径 .. from '../config',则一切正常。问题是文件之间的相对路径会发生变化,因此无法很好地扩展。为了有一个固定路径,我在 OP 中使用了SystemJS map 选项。
    • 这个新答案怎么样?
    • 很抱歉,这与您最初的回答没有任何区别。即使路径缺少文件扩展名,SystemJS 也可以轻松找到配置文件:我知道这一点是因为 version 变量值已正确导入组件中。但是我从打字稿编译器得到与以前相同的错误
    • 你的问题是说,在浏览器中,组件看不到config.version
    • 是的,当我打开线程时确实如此,因为我的初始代码是 export module Config {...(请参阅 OP)。然后我将其更改为export var Config = {...,它开始在浏览器中工作。然后我修改了您的建议以使用export const Config = {...(您当前编写的代码根本无法编译:export const Config {...)。所以事情在浏览器中工作,但打字稿编译器从 OP 抛出相同的错误
    猜你喜欢
    • 2021-11-14
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多