直接从 TypeScript 调用 JavaScript

Posted

技术标签:

【中文标题】直接从 TypeScript 调用 JavaScript【英文标题】:Calling JavaScript directly from TypeScript 【发布时间】:2012-09-24 12:38:34 【问题描述】:

我刚刚下载了 TypeScript 文档。我有一些 javascript 类,我想在 TypeScript 测试应用程序中创建和使用这些类

如何从 TypeScript 调用包含的 JavaScript 的 JavaScript 函数。我不想创建“d.ts”文件。只是为了创建我的类,调用它的方法,访问它的属性。

我该怎么做?


我正在尝试将 kendoUI 与 TypeScript 一起使用。

例如显示一个我必须做的窗口:

    有一个 html 来表示窗口的内容。我有一个 id 为 logonDialog 的 div。这个 div 最初是隐藏的; 我创建窗口:logonDlg.kendoWindow(logOnParams); 然后使用 jQuery 我显示 div:使用 logonDlg.show();

例子

var logonDlg = $("logonDialog");

if (!logonDlg.data("kendoWindow")) 
   logonDlg.kendoWindow(logOnParams);
   logonDlg.show();

一切正常。 JS 是按我的意愿生成的,但我收到一个错误,因为“JQuery”类型的值上不存在“kendoWindow”属性。

如何禁用此类错误。正如 Ryan 所说,我无法工作。

【问题讨论】:

【参考方案1】:

在这种特殊情况下,您可以只包含 Telerik 提供的 Kendo UI TypeScript definitions。

(我意识到这个问题是在 TS 定义可能还不存在时被问到的,但我想为将来遇到这个问题的人添加这个细节。)

【讨论】:

【参考方案2】:

有一个更好的解决方案。只需将 jQuery logonDlg 转换为任何这样的:

(<any>logonDlg).kendoWindow(logOnParams);

代码会有些不同,但工作原理是一样的。

    没有强制转换生成的代码是这样的:logonDlg.kendoWindow(logOnParams); 加上演员表会是这样的:(logonDlg).kendoWindow(logOnParams);

两者都可以正常工作。

问候

【讨论】:

【参考方案3】:

如果你想停止错误而不做很多额外的工作,你可以从你的 JS 代码中“声明”对象:

declare var w; // implicit type here is 'any'
// (later, anywhere in your file...)
var x = new w(); // you can do whatever you want with w now without getting errors
w.x = 4; // etc.

【讨论】:

【参考方案4】:

你就去做吧。 TypeScript 不会阻止你。您将在编译器输出中看到警告,但 tsc 将生成您的 JS 文件就好了。

【讨论】:

感谢大家。我会尽快尝试。 vs2013不是这样吗?建设停止,我无法运行我的项目。

以上是关于直接从 TypeScript 调用 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React/TypeScript 应用程序中的模块方法上获取 VSCode 智能感知?

重新认识Typescript | Vue3源码系列

Typescript 从具有泛型类型的对象索引调用函数

typescript 从子类调用的构造函数参数推断类型

如何将道具从调用组件传递给 HOC - React + Typescript

从 Angular 中的 JavaScript 文件调用 Typescript 函数