如何导入其他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 { }
另一方面, 外部模块用于引用要在运行时使用CommonJS或AMD加载的外部源文件。 在你的情况下,要使用外部模块加载,你必须做到以下几点:
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"/>