2015-02-08 129 views
7

使用Typescript,有没有办法从外部模块导入类型?导入外部定义

基本上我只想让一个模块知道另一个模块的类型(为Intellisense提供支持),但是没有JavaScript中的输出。我想这样做是因为有问题的模块可能已经加载,也可能没有加载 - 即没有硬依赖性,但我想要一些类型化的代码运行并使用该模块(如果存在的话)。

希望这是显而易见的。

+0

为什么这是downvoted? – ditoslav 2015-10-28 14:20:21

回答

6

您可以使用定义文件以及引用注释,这样可以在不添加任何导入语句(例如requiredefine)的情况下使用这些类型。

///<reference path="module.d.ts" /> 

您可以自动生成编译时定义文件,虽然你的目的,你可能会想手摇自定义一个(取决于你想如何使用它 - 自动人会想到要导入)。

示例代码

ModuleA.ts

class ExampleOne { 
    doSomething() { 
     return 5; 
    } 
} 

export = ExampleOne; 

ModuleB.ts

class ExampleTwo { 
    doSomething() { 
     return 'str'; 
    } 
} 

export = ExampleTwo; 

用途:

import B = require('moduleb'); 

var a = new ExampleOne(); 
var b = new B(); 

为了使这项工作,你会创建ModuleA.d.ts

ModuleA.d.ts

declare class ExampleOne { 
    doSomething(): number; 
} 

,然后引用它,如下所示:

/// <reference path="modulea.d.ts" /> 

import B = require('moduleb'); 

var a = new ExampleOne(); 
var b = new B(); 
+0

我不认为这与外部模块一起工作?我认为这只是内部的。我会尽我所能去! – Barguast 2015-02-08 18:28:07

+0

我已经扩展了一个例子来说明如何做到这一点。 – Fenton 2015-02-09 08:52:49

+0

谢谢。这似乎工作,但不幸的是,自动生成的.d.ts文件包含'export ='行,似乎阻止类型通过。我会在GitHub上提出这个问题。 – Barguast 2015-02-09 11:19:12