【发布时间】:2014-10-05 02:03:33
【问题描述】:
目前我有一个用 CoffeeScript 开发的大型代码库,并想用一些 TypeScript 来扩展它。
假设我在CoffeeClass.coffee 文件中有以下代码:
define 'CoffeeClass', ->
class CoffeeClass
foo: () -> 1
打算通过require以如下方式加载(我们称这个文件为CoffeeUser.coffee):
require ['CoffeeClass'], (CoffeeClass) ->
class MyClass extends CoffeeClass
foo: () -> super() + 1
console.log (new MyClass().foo()) # => 2
现在可以使用标准 RequireJS 标记在浏览器中加载它:
<script data-main="CoffeeUser.js" src="require.js"></script>
我想从 TypeScript 代码中扩展 CoffeeClass。这就是我尝试过的:
首先编写一个CoffeeClass.d.ts 定义文件(我知道这是错误的,但它显示了我想要实现的目标):
export class CoffeeClass {
foo(): number;
}
然后尝试从TypeScriptUser.ts使用它:
import CoffeeClass = require('CoffeeClass');
class TypeScriptUser extends CoffeeClass {
foo(): number {
return super.foo() + 1;
}
}
但它无法编译,部分原因是我找不到d.ts 文件的正确语法,部分原因是我无法正确告诉编译器如何扩展CoffeeClass(据我所知编译器无法理解CoffeeClass 确实是一个类,而不仅仅是一个模块)。
那么我可以告诉 TypeScript 编译器 模块 是 一个类 吗?如果不是,您会建议我如何更改 CoffeeClass 设计以从 TypeScript 代码扩展它并且不失去所有类型安全性?
【问题讨论】:
标签: coffeescript requirejs typescript