在TypeScript代码中扩展加载了RequireJS的CoffeeScript类
目前,我有一个使用CoffeeScript开发的大型代码库,并希望使用一些TypeScript对其进行扩展 假设我在在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
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
调用