当前位置: 首页 > 知识库问答 >
问题:

ES5匿名函数的打字稿导入

公冶子琪
2023-03-14

我正在使用ES6导入语法并导入一个第三方ES5模块,该模块导出一个未命名函数的单个导出:

module.exports = function (phrase, inject, callback) { ... }

因为没有默认导出,而是一个匿名函数输出,我必须像这样导入和使用:

import * as sentiment from 'sentiment';
const analysis = sentiment(content);

这会产生Typescript错误:

错误TS2349:无法调用其类型缺少调用签名的表达式。类型“typeof”没有兼容的调用签名。

我想我之所以会这样是因为我没有正确键入ES5导入(没有公共键入文件)。当我认为该函数是默认导出时,我有以下定义:

interface IResults {
  Score: number;
  Comparitive: number;
}

declare var fn: (contents: string, overRide?: IDictionary<number>) => IResults;

declare module "sentiment" {
  export default fn;
};

这一切都很有道理,但鉴于导入不是默认导出,我不确定如何定义这个模块和函数。我确实尝试了以下方法:

declare module "sentiment" {
  export function (contents: string, overRide?: IDictionary<number>): IResults;
};

虽然这似乎是一个有效的导出定义,但它与匿名调用定义不匹配,并引发以下错误:

错误TS2349:无法调用其类型缺少调用签名的表达式。类型“typeof”没有兼容的调用签名。

共有1个答案

甘明朗
2023-03-14

在这种情况下,您将无法以这种方式导入<如模块中所述:export=和import=require():

使用export=导入模块时,必须使用TypeScript特定的import let=require(“模块”)来导入模块。

所以你必须这样做:

import sentiment = require("sentiment");
const analysis = sentiment(content);

定义文件可能如下所示:

declare function fn(contents: string, overRide?: IDictionary<number>): IResults;
export = fn;
 类似资料:
  • 问题内容: 我在这里找到了解决方案:Webpack和Typescript图像导入 但我为此得到错误: 我想我需要以某种方式强制导入,但无法弄清楚如何。我在React中做到这一点。我看到该属性定义为,这就是为什么会弹出错误。 这是代码: HTML: 并基于上述解决方案进行定义: tsconfig: 问题答案: 摆脱该错误的一种方法是通过按如下方式修改d.ts文件: 去掉 或者您可以执行以下操作: 更

  • 问题内容: 目前,我们的代码存在一种情况,即我们在Java层中使用枚举,该枚举通过以下构造函数存储id和“显示值”: 我们希望打字稿中的某些内容能够与之匹配,以便以有意义的方式显示状态以执行逻辑并在前端向用户显示值。这可能吗?有没有更好的方法来解决这个问题?我们希望避免使用诸如status.id()= 1或status.name()=’Active’这样的逻辑,从而推动枚举。 谢谢 问题答案: T

  • 5.6. 匿名函数 拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似,区别在于func关键字后没有函数名。函数值字面量是一种表达式,它的值被成为匿名函数(anonymous function)。 函数字面量允许我们在使用函数时,再定义它。通过这种技巧,我们可以改写之前对st

  • 有没有想过定义一个很短的回调函数,但又不想用 def 的形式去写一个那么长的函数,那么有没有快捷方式呢? 答案是有的。 python 使用 lambda 来创建匿名函数,也就是不再使用 def 语句这样标准的形式定义一个函数。 匿名函数主要有以下特点: lambda 只是一个表达式,函数体比 def 简单很多。 lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封

  • 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: >>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81]

  • 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: >>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) [1, 4, 9, 16, 25, 36, 49, 6