如何导入其他TypeScript文件?

当使用针对vs.net的TypeScript插件时,如何在其他TypeScript文件中声明一个TypeScript文件导入模块?

文件1:

module moo { export class foo ..... } 

文件2:

 //what goes here? class bar extends moo.foo { } 

从TypeScript 1.8版开始,您可以像使用ES6一样使用简单的import语句:

 import { ZipCodeValidator } from "./ZipCodeValidator"; let myValidator = new ZipCodeValidator(); 

https://www.typescriptlang.org/docs/handbook/modules.html

老答案:从TypeScript版本1.5,您可以使用tsconfig.json : http : tsconfig.json

它完全消除了评论风格参考的需要。

较老的答案:

您需要引用当前文件顶部的文件。

你可以这样做:

 /// <reference path="../typings/jquery.d.ts"/> /// <reference path="components/someclass.ts"/> class Foo { } 

等等

这些path是相对于当前文件。

你的例子:

 /// <reference path="moo.ts"/> class bar extends moo.foo { } 

Typescript区分了两种不同types的模块: 内部模块用于在内部构build代码。 在编译时,您必须使用参考path将内部模块引入到范围中:

 /// <reference path='moo.ts'/> class bar extends moo.foo { } 

另一方面, 外部模块用于引用要在运行时使用CommonJSAMD加载的外部源文件。 在你的情况下,要使用外部模块加载,你必须做到以下几点:

moo.ts

 export class foo { test: number; } 

app.ts

 import moo = module('moo'); class bar extends moo.foo { test2: number; } 

注意将代码转换为范围的不同方式。 使用外部模块时,必须使用包含模块定义的源文件的名称来使用module 。 如果你想使用AMD模块,你必须按如下方式调用编译器:

 tsc --module amd app.ts 

然后这被编译

 var __extends = this.__extends || function (d, b) { function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); } define(["require", "exports", 'moo'], function(require, exports, __moo__) { var moo = __moo__; var bar = (function (_super) { __extends(bar, _super); function bar() { _super.apply(this, arguments); } return bar; })(moo.foo); }) 

如果您使用的是AMD模块,其他答案在TypeScript 1.0(在撰写本文时是最新的)中将不起作用。

您可以使用不同的方法,具体取决于您希望从每个.ts文件导出多less内容。

多个出口

Foo.ts

 export class Foo {} export interface IFoo {} 

Bar.ts

 import fooModule = require("Foo"); var foo1 = new fooModule.Foo(); var foo2: fooModule.IFoo = {}; 

单一出口

Foo.ts

 class Foo {} export = Foo; 

Bar.ts

 import Foo = require("Foo"); var foo = new Foo(); 

如果您正在寻找使用模块并希望将其编译为单个JavaScript文件,则可以执行以下操作:

 tsc -out _compiled/main.js Main.ts 

Main.ts

 ///<reference path='AnotherNamespace/ClassOne.ts'/> ///<reference path='AnotherNamespace/ClassTwo.ts'/> module MyNamespace { import ClassOne = AnotherNamespace.ClassOne; import ClassTwo = AnotherNamespace.ClassTwo; export class Main { private _classOne:ClassOne; private _classTwo:ClassTwo; constructor() { this._classOne = new ClassOne(); this._classTwo = new ClassTwo(); } } } 

ClassOne.ts

 ///<reference path='CommonComponent.ts'/> module AnotherNamespace { export class ClassOne { private _component:CommonComponent; constructor() { this._component = new CommonComponent(); } } } 

CommonComponent.ts

 module AnotherNamespace { export class CommonComponent { constructor() { } } } 

你可以在这里阅读更多: http : //www.codebelt.com/typescript/javascript-namespacing-with-typescript-internal-modules/

我现在要避免使用/// <reference path='moo.ts'/>但是对于定义文件未包含在包中的外部库。

reference path解决了编辑器中的错误,但并不意味着文件需要导入。 因此,如果您正在使用gulp工作stream程或JSPM,则可能会尝试将每个文件分别编译为一个文件,而不是tsc -out

从手稿1.5

只需在文件级别(根作用域)上添加要导出的内容即可

aLib.ts

 { export class AClass(){} // exported ie will be available for import export valueZero = 0; // will be available for import } 

您也可以稍后在文件末尾添加要导出的内容

 { class AClass(){} // not exported yet valueZero = 0; // not exported yet valueOne = 1; // not exported (and will not in this example) export {AClass, valueZero} // pick the one you want to export } 

甚至混合在一起

 { class AClass(){} // not exported yet export valueZero = 0; // will be available for import export {AClass} // add AClass to the export list } 

对于import你有2个选项,首先你再次select你想要的(一个接一个)

anotherFile.ts

 { import {AClass} from "./aLib.ts"; // you import only AClass var test = new AClass(); } 

或者整个出口

 { import * as lib from "./aLib.ts"; // you import all the exported values within a "lib" object var test = new lib.AClass(); } 

有关导出的注意事项:导出两次相同的值将引发错误{export valueZero = 0; export {valueZero}; // valueZero已经被导出…}

更新:

从版本1.8+您可以使用简单的简单import语句,如:

 import { ClassName } from '../relative/path/to/file'; 

或通配符版本:

 import * as YourName from 'global-or-relative'; 

使用像"///<reference path="web.ts" /> ,然后在VS2013项目属性中build立”app.ts“,”Typescript构build“ – >”结合JavaScript输出到文件:“ ) – > “app.js”

 import {className} from 'filePath'; 

还记得。 您正在导入的类必须导出到.ts文件中。

在Visual Studio中快速简单的过程

从解决scheme窗口中拖放 .ts扩展名的文件到编辑器,它会生成内联的参考代码,如..

 /// <reference path="../../components/someclass.ts"/>