我需要一些与Typescript相关的帮助以及如何在内部模块中使用外部模块。
我想将所有ViewModel代码逻辑存储在ViewModels内部模块中。
** HomePageViewModel.ts **
module ViewModels {
export class HomePageViewModel {
constructor() {
console.log('Creating HomePageViewModel');
}
public SayHello(): void {
console.log('Hello from HomePageViewModel');
}
}
}
** ViewModelFactories **
public static CreateHomePageViewModel(): ViewModels.HomePageViewModel {
return new ViewModels.HomePageViewModel();
}
这是正常工作,我可以编译,一切都在执行时工作正常。
现在,如果我在HomePageViewModel中添加导入(例如,淘汰赛)
import ko = require('knockout');
Typescript不再编译。 ViewModelFactories代码在Views下面显示下划线,并告诉我它无法找到符号视图'。
如何从ViewModel模块中访问挖空模块?
答案 0 :(得分:2)
基本上,您无法混合两种模块类型。
只要您需要其他外部模块,您的内部模块就会变为外部模块。
你必须在&#34;内部&#34;中访问淘汰赛。方式:将其作为<script>
导入到您的起始HTML文件中(因为您可能已经在为其他文件执行此操作),然后使用全局ko
变量。
另一种解决方案是将模块设置为外部。
答案 1 :(得分:1)
你需要得到&#34; knockout.d.ts&#34;文件(或类似)与&#34; ko.xxxxxx&#34;定义。您可以从nuget或github获取。 之后你就能写下来了。
var observable = ko.observable<number>(100);
在TypeScript代码中。当然你还需要包含&#34; knockout.x.x.x.js&#34;文件在你的页面上。
可能应该使用namspase,如TypeScript Documentation所述:
不必要的命名空间
如果您要将程序从内部模块转换为外部模块,可以很容易地得到如下所示的文件: shapes.ts
export module Shapes {
export class Triangle { /* ... */ }
export class Square { /* ... */ }
}
此处的顶级模块Shapes无缘无故地包装了Triangle和Square。这对您的模块的消费者来说是令人困惑和恼人的: shapeConsumer.ts
import shapes = require('./shapes');
var t = new shapes.Shapes.Triangle(); // shapes.Shapes?
答案 2 :(得分:0)
您的HomePageViewModel
是在ViewModels
模块中定义的,而不是Views
模块。
public static CreateHomePageViewModel(): ViewModels.HomePageViewModel {
return new ViewModels.HomePageViewModel();
}