【问题标题】:Require JS Object and Functions in Typescript Angular2 project在 Typescript Angular2 项目中需要 JS 对象和函数
【发布时间】:2017-07-02 19:39:48
【问题描述】:

我正在使用 Typescript 2.1.5 并尝试用它编写一些更新的代码部分。 我有一个 JS library,我还没有准备好在 Typescript 中更新。问题是我需要在一个简单的 Typescript 组件中使用一些 Javascript 代码

我一直在网上获取一种方法来让我的 Javascript 函数被调用并在 .TS 文件中工作。不幸的是,信息要么过时(大部分)、不清楚或根本没有解释。我已经尝试了很多技巧,但都没有奏效。

所以我的问题是:在 TS 文件 (ES6) 中使用 javascript 代码的最简单方式和最简单方式是什么?必须遵循一个协议才能完成这项工作。

任何教程、链接或解释都将不胜感激,我相信会帮助处于相同情况的其他人。

为了更好地理解这里有一些代码 sn-ps :

我首先在 component.ts 中导入我的 JS 文件

var ZP = require('./zp.js');

在我的 js 文件中,我有两种类型的函数。分别是一个基本的和另一个来自对象的方法:

**export** function logTest(){
    console.log("Responding");
}//Simple function

(*我刚刚在编辑时发现,通过将关键字“export”附加到简单函数可以在 TS 文件中调用。这不适用于方法 *)。

DObject.stringtest = function(){
    return "Responding";
} //Object Method

回到我的 component.ts 文件,我调用了每个文件。现在调用带有 export 关键字simple 函数,但 DObject 方法仍然未定义。 (我对 DObject 进行了虚拟调用,只是为了展示什么不起作用,即使它对某些人来说似乎很明显)。

testFunc(event){
      console.log("event is okay");
      console.log(ZP.logTest()); <--- Now Works
      console.log(ZP.stringTest()); <--- Don't Work
      console.log(ZP.DObject.stringTest()); <--- Don't Work
      console.log(ZP.DObject.stringTest); <--- Don't Work
      }

这里是控制台日志:

DObject.stringTest is not a function

(对于 stringTest() 的前两次调用)

Undefined

(最后一次调用 DObject.stringTest )

(我刚刚发现了一些关于声明文件的东西,我会试一试,希望如果它有效,我会编辑一个完整的分步教程。同时,任何帮助将不胜感激。)

【问题讨论】:

  • 直接导入即可。所有的JS都是有效的TS
  • 我听说了,但是当我从 JS 文件中查询一个函数时,我得到了一个错误:xxx 不是一个函数。另外,在构造函数中不可能像在 this 上下文中那样使用它。
  • 尝试发布一些示例代码来帮助解释您的问题。 JavaScript 文件中的简单函数是什么?您如何尝试在 TypeScript 中使用它?你是如何导入这个文件的?此类基本信息将帮助其他人正确诊断您的问题。

标签: javascript typescript require


【解决方案1】:

在您的情况下,打字稿中未检测到您现有的 javascript 文件,因为打字不可用。

您可以创建一个类型定义 (index.d.ts) 文件并继续添加您的类型,以便您的 tsc 编译器可以使用它。

以下是您进入打字稿世界时需要了解的几件事。有些人可能知道,有些人可能不知道。

  • 在 tsconfig.json 中将每个 typescript 文件转换为 java 脚本到您想要的特定版本

  • typescript 理解 typescript(对于 javascript 类型定义是必需的)或类型定义。

  • 有多种打字方式有 2 种形式:
    1. 打字安装
    2. @types 命名空间包
  • 导入和导出可让其他人使用您的成员和属性

【讨论】:

  • 好的,但是 .d.ts 文件中的 Object 声明的结构如何?编译器如何知道我的 DObject 存在?我如何声明像 DObject.Counter = function(){...} 这样的相当静态的函数(方法)?那么如何称呼他们呢?要求变量名是否足够?我必须导入 .d.ts 文件吗?
猜你喜欢
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多