首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES5匿名函数的类型记录导入

ES5匿名函数的类型记录导入
EN

Stack Overflow用户
提问于 2017-01-01 22:09:47
回答 1查看 4K关注 0票数 1

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

代码语言:javascript
复制
module.exports = function (phrase, inject, callback) { ... }

由于没有默认导出,而是只有一个匿名函数输出,所以我必须导入并使用如下所示:

代码语言:javascript
复制
import * as sentiment from 'sentiment';
const analysis = sentiment(content);

这就产生了类型记录错误:

错误TS2349:不能调用类型缺乏调用签名的表达式。类型‘类型的“感情”没有兼容的呼叫签名。

我想我得到这一点是因为我没有正确地输入ES5导入(没有公开的输入文件)。当我认为函数是默认导出时,我有以下定义:

代码语言:javascript
复制
interface IResults {
  Score: number;
  Comparitive: number;
}

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

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

这一切都非常有意义,但由于导入是,而不是,这是一个默认的导出,我不知道如何定义这个模块和函数。我确实尝试了以下几点:

代码语言:javascript
复制
declare module "sentiment" {
  export function (contents: string, overRide?: IDictionary<number>): IResults;
};

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

错误TS2349:不能调用类型缺乏调用签名的表达式。类型‘类型的“感情”没有兼容的呼叫签名。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-01 22:35:56

在这种情况下,您将无法以这种方式导入。

正如它在模块: export =和import = require()中所说的那样

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

所以你必须这样做:

代码语言:javascript
复制
import sentiment = require("sentiment");
const analysis = sentiment(content);

定义文件可能应该如下所示:

代码语言:javascript
复制
declare function fn(contents: string, overRide?: IDictionary<number>): IResults;
export = fn;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41419484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档