2014-10-16 139 views
2

我需要一些与Typescript相关的帮助以及如何在内部模块中使用外部模块。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'); 

打字稿不再编译。 ViewModelFactories代码在视图下加下划线,并告诉我它'找不到符号视图'。

如何从ViewModel模块中访问分离模块?

回答

1

您需要使用“ko.xxxxxx”定义获得“knockout.d.ts”文件(或类似文件)。您可以从nugetgithub获取。 当您能够编写例如

var observable = ko.observable<number>(100); 

在您的TypeScript代码中。当然,你仍然需要在页面中包含“knockout.x.x.x.js”文件。

可能是你应该使用namspase,截至TypeScript Documentation描述:

不用命名空间

如果你从内部模块与外部模块转换程序,它可以很容易与落得文件看起来像这样: shapes.ts

export module Shapes { 
    export class Triangle { /* ... */ } 
    export class Square { /* ... */ } 
} 

顶层模块这里形状包扎三角波和方没有理由。这对消费者来说是你的模块的困惑和愤怒: shapeConsumer.ts

import shapes = require('./shapes'); 
var t = new shapes.Shapes.Triangle(); // shapes.Shapes? 
+0

我已经有了knockout.d.ts文件。如果我写“导出模块ViewModels”。一切工作正常,我可以导入淘汰赛,但然后该模块被视为外部模块,我需要它来访问它。它也导致模块不加载定义模块的其他文件。 – user2465083 2014-10-17 08:12:17

+0

我检查了'https://typescript.codeplex.com/wikipage?title=Modules%20in%20TypeScript'文档,可能需要指定淘汰赛的相对路径,如'import shapes = require('./ shapes ');'在上面提到的文档中? – TSV 2014-10-17 11:17:51

+0

可能你应该使用导入名称来访问knockout? 'import knockout = require('knockout'); var v = knockout.ko.observable();'? – TSV 2014-10-17 11:19:53

0

HomePageViewModelViewModels模块不是Views模块中的定义。

public static CreateHomePageViewModel(): ViewModels.HomePageViewModel { 
    return new ViewModels.HomePageViewModel(); 
} 
+0

感谢您发现这一点,但不幸的是这不是问题:( – user2465083 2014-10-17 08:07:42

2

基本上,你不能混用两种模块类型。

只要您需要另一个外部模块,您的内部模块就会变为外部模块。 您必须以“内部”方式访问基因敲除:在起始HTML文件中将其作为<script>导入(因为您可能已经在为其他文件执行操作),然后使用全局变量ko

另一种解决方案是让你的模块在外部。

+0

是否有任何解决方法?我在这里有这个问题的麻烦:https://stackoverflow.com/questions/47433240/cant -use-瓣叶插件功能于打字稿的命名空间 – AlexandruC 2017-11-23 15:45:14

相关问题