使用Javascript/RequireJS时TypeScript AMD实现错误 [英] Typescript AMD implementation bad with Javascript / RequireJS

查看:17
本文介绍了使用Javascript/RequireJS时TypeScript AMD实现错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有此ts模块:

export function say(){
    console.log("said");
}

我使用amd选项对其进行编译,我可以很容易地从ts客户端使用它:

import foo = module("tsmodule")
foo.say();

export var x = 123;

但是,如果我有等同于ts模块的javascript:

define(["require", "exports"], function(require, exports) {
    function say() {
        console.log("said");
    }
    exports.say = say;
})

没有办法轻松使用它。可能的最简单解决方案:

// of course you can use .d.ts for requirejs but that is beside the point
declare var require:any;

// will fail with error module has not been loaded yet for context
// http://requirejs.org/docs/errors.html#notloaded
var useme = require("jsmodule")
useme.say();

export var x = 123;
import foo = module("tsmodule")
foo.say();

因错误http://requirejs.org/docs/errors.html#notloaded而失败。因为在生成的类型脚本中没有将"jsmodule"传递给定义调用。

我有的两个解决方法

  • 不使用导入/导出(语言功能丢失)
  • 使用REQUIRED([])(仍然无法导出依赖于REQUIRED([])调用的内容)

有限制:https://github.com/basarat/typescript-requirejs。有没有别的办法?如果没有,您能否在此投票:https://typescript.codeplex.com/workitem/948:)

推荐答案

如果要加载JavaScript模块,可以始终使用(文档不完整)amd-dependency标记:

/// <amd-dependency path="jsmodule" />

这将把jsmodule放入您的定义调用的依赖项数组中。

,然后提供一个声明文件,您只需在其中声明

module useme {
    function say(): void;
}

这篇关于使用Javascript/RequireJS时TypeScript AMD实现错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆