Can';t提供从Webpack config到Angular 2的环境变量

Can';t提供从Webpack config到Angular 2的环境变量,angular,typescript,webpack,webpack-2,Angular,Typescript,Webpack,Webpack 2,在我的网页配置中,我有以下内容 var config = require("./webfig"); config.module = config.module || []; config.plugins.push(new webpack.DefinePlugin({ "Hazaa": "Shazoo" })); module.exports = config; 然而,在TS文件中,当我尝试使用下面的行访问它时,transpiler抱怨这样的东西不可用。我不完全确定如何对其进行故障排除,goog

在我的网页配置中,我有以下内容

var config = require("./webfig");
config.module = config.module || [];
config.plugins.push(new webpack.DefinePlugin({ "Hazaa": "Shazoo" }));
module.exports = config;
然而,在TS文件中,当我尝试使用下面的行访问它时,transpiler抱怨这样的东西不可用。我不完全确定如何对其进行故障排除,googlearching对于这个特定问题没有太大价值(就我正确认识到的诊断而言)

如何在TypeScript代码中访问Hazaa

编辑

根据这些评论,我引入了以下更改

config.plugins.push(new webpack.DefinePlugin({ "Hazaa": JSON.stringify("Shazoo") }));
名为app.d.ts的文件创建在与先前存在的index.d.ts相同的目录中。它只包含
声明变量Hazaa:string,我是从typings.json这样引用它的

{
  "globalDependencies": {
    "core-js": "registry:dt/core-js#0.9.7+20161130133742",
    "app": "file:./typings/app.d.ts"
  }
}
我还从tsconfig.json节文件中引用了它,如下所示

{
  "compilerOptions": {
    "baseUrl": "./source/application",
    "target": "es5",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  },
  "files": [
    "typings/index.d.ts",
    "typings/app.d.ts"
  ],
  "include": [ "source/**/*" ],
  "exclude": [ "node_modules" ]
}

没有任何帮助-当我在组件的构造函数中转到
console.log(Hazaa)
时,我得到一个编译时错误,说找不到名称。

因为TypeScript不知道网页包全局变量(用DefinePlugin定义的变量)它在构建项目时被注入到代码中,因此它会给出一个错误。您必须告诉TypeScript,
Hazaa
是一个字符串类型的变量,它将在构建时进行计算

因此,在.d.ts文件中声明
Hazaa

declare var Hazaa: string;

该声明的适当位置在哪里?我的意思是,我如何声明它以便它自动进入我的x.d.ts文件?或者你是说我必须手动操作?我的打字有时会被重建,所以那将是一件痛苦的事……这个声明可能在你的
app.d.ts
上。看看这个,还是不太清楚。我读了博客并做了一些修改(请查看问题中的编辑)。除此之外,你还需要使用
JSON.stringify(“Shazoo”)
“Shazoo”
你是说我必须对字符串进行stringify吗?这就像
(bool)true
…假设您拥有
console.log(Hazaa)
。它将被
console.log(Shazoo)
取代。明白你为什么要用引号吗?是的。如果我必须手动编辑.d.ts文件,仍然感到困惑。这些会很有规律地再生…不太清楚你的意思。我说的是,你应该在你的网页中做。不确定这与定义文件有什么关系。