在TypeScript代码中扩展加载了RequireJS的CoffeeScript类

在TypeScript代码中扩展加载了RequireJS的CoffeeScript类,coffeescript,requirejs,typescript,Coffeescript,Requirejs,Typescript,目前,我有一个使用CoffeeScript开发的大型代码库,并希望使用一些TypeScript对其进行扩展 假设我在CoffeeClass.coffee文件中有以下代码: 定义“咖啡类”,-> 课堂咖啡课 foo:()->1 它是通过以下方式通过require加载的(我们将此文件称为CoffeeUser.coffee): require['CoffeeClass'],(CoffeeClass)-> 类MyClass扩展了CoffeeClass foo:()->super()+1 console

目前,我有一个使用CoffeeScript开发的大型代码库,并希望使用一些TypeScript对其进行扩展

假设我在
CoffeeClass.coffee
文件中有以下代码:

定义“咖啡类”,->
课堂咖啡课
foo:()->1
它是通过以下方式通过
require
加载的(我们将此文件称为
CoffeeUser.coffee
):

require['CoffeeClass'],(CoffeeClass)->
类MyClass扩展了CoffeeClass
foo:()->super()+1
console.log(新的MyClass().foo())#=>2
现在可以使用标准的RequireJS标记将其加载到浏览器中:


我想从TypeScript代码扩展
CoffeeClass
。这就是我尝试过的:

首先写一个
CoffeeClass.d.ts
definiton文件(我知道这是错误的,但它显示了我试图实现的目标):

export class咖啡类{
foo():数字;
}
然后尝试从
TypeScriptUser.ts
使用它:

import CoffeeClass=require('CoffeeClass');
类TypeScriptUser扩展CoffeeClass{
foo():数字{
返回super.foo()+1;
}
}
但它无法编译,部分原因是我无法找到
d.ts
文件的正确语法,部分原因是我无法正确地告诉编译器如何扩展
CoffeeClass
(据我所知,编译器无法理解
CoffeeClass
实际上是一个类,而不仅仅是一个模块)


那么我能告诉TypeScript编译器模块是一个类吗?如果没有,您会建议我如何更改
CoffeeClass
设计,以从TypeScript代码扩展它,并且不丢失所有的类型安全性?

最终我找到了解决方案。这就是特殊的
export=
语法。给你<代码>CoffeeClass.d.ts:

声明类CoffeeClass{
foo():数字;
}
出口=咖啡类;
TypeUser.ts

//
导入CoffeeClass=require('CoffeeClass')
类MyClass扩展了CoffeeClass{
foo(){
返回super.foo()+1;
}
}
console.log(新的MyClass().foo());//=>2.
请注意,编译器将在编译代码时推断正确的
require
调用