【发布时间】:2017-11-16 00:11:08
【问题描述】:
在没有 TypeScript 的情况下使用
我有一个无法编辑的 RequireJS 模块
RequireJS 模块:
//app/Router.js
define([], function() {
return {
generate: function(route) { /*do something*/ }
}
});
该模块没有任何导出,但使用 return 语句,它可以在其他 require 模块中使用,如下所示:
define(['app/Router'], function(router) {
router.generate('myRoute');
});
我想在 TypeScript 中使用 app/Router.js
变体1:TypeScript知道类型,但JS有错误
所以我尝试制作我的定义模块:
//Router.d.ts
export interface Router
{
generate(route:string): string;
}
declare let router: Router;
export default router;
在我的 TypeScript 文件中使用它,例如:
import router from 'app/Router'
router.generate('something');
将生成该文件:
define(
["require", "exports", "app/Router"],
function (require, exports, Router_1)
) {
Router_1.default.generate();
}
问题是默认属性。 JS 说不能在 null 上调用 generate。因为Router_1已经是我想要的对象了。
变体 2:JS 正确但 TypeScript 不知道类型
我也试过了:
//Router.d.ts
export interface Router
{
generate(route:string): string;
}
declare let router: Router;
declare module "router" {
export = router;
}
像这样使用它:
import * as router from 'app/Router'
router.generate('something');
输出正确:
define(["require", "exports", "app/Router"], function (require, exports, router) {
router.generate();
});
但是 TypeScript 编译器说:类型上不存在属性“生成”
问题
我的 Router.d.ts 和 import 语句必须是什么样子才能获得正确的输出并且 TypeScript 知道正确的类型?
【问题讨论】: