2016-11-25 89 views
0

在使用Typescript和requirejs设置的情况下,所以打字稿被配置为使用AMD模块。Typescript:找不到导出的AMD类的类型

我想导出一个类,并从另一个使用它。这里是一些示例代码。

//file: ClassA.ts 
export = class ClassA { 
} 

//file: ClassB.ts 
import ClassA = require("ClassA") 

export = class ClassB { 
    constructor(classA: ClassA) { //ClassA is not found 
     // However this will work: 
     let c = new ClassA(); 
    } 
} 

编译时出现以下错误。

ClassB.ts(4,25):错误TS2304:找不到名称'ClassA'。

然而,intellisense对于ClassA的实例来说没问题,我得到了实例的完整智能感知。

那么我在这里做错了什么?

编辑:这是我的tsconfig.json

{ 
    "compileOnSave": true, 
    "compilerOptions": { 
    "noImplicitAny": false, 
    "noEmitOnError": true, 
    "removeComments": false, 
    "sourceMap": true, 
    "target": "es5", 
    "module": "amd" 
    }, 
    "exclude": [ 
    "node_modules", 
    "wwwroot" 
    ] 
} 

回答

1

它看起来像你混合JavaScript和打字稿语法出口国和进口类。
试试这个语法:

ClassA.ts: 
export class ClassA { 
    print() { 
     console.log(`ClassA.print()`); 
    } 
} 

ClassB.ts: 
import {ClassA} from './ClassA'; 

class ClassB { 
    print() { 
     let a = new ClassA(); 
     a.print(); 
    } 
} 
+0

这工作,非常感谢!我不知道你可以在AMD模块中使用es6模块语法。 – mode777

+0

TypeScript使用的模块语法基于es6。根据tsconfig.json中的设置,编译器将负责生成AMD或commonJs语法。 – blorkfish