随机字符串模块的类型定义异常

Posted

技术标签:

【中文标题】随机字符串模块的类型定义异常【英文标题】:Exception with type definition for random-string module 【发布时间】:2015-09-05 14:26:42 【问题描述】:

我正在尝试为 random-string 编写 .d.ts。

我有这个代码:

declare module "random-string" 
    export function randomString(opts?: Object): string;

我可以毫无问题地导入模块:

import randomString = require('random-string');

并调用:

console.log(randomString); // --> [Function: randomString]

但是,无论有没有参数,这都不起作用:

console.log(randomString(length: 10);
console.log(randomString());

我从 tsc 收到此错误:

错误 TS2088:无法调用类型缺少调用签名的表达式。

我查看了随机字符串的源代码,并找到了我尝试与之交互的方法的代码:

module.exports = function randomString(opts) 
   // Implementation...
;

我设法为 CSON 模块编写了一个 .d.ts,没问题,但那是导出一个“类”而不是直接导出一个函数。这很重要吗?

【问题讨论】:

【参考方案1】:

您的声明说有一个名为 random-string 的模块,其中包含一个名为 randomString 的函数...

所以你的用法应该是:

console.log(randomString.randomString( length: 10 ));
console.log(randomString.randomString());

如果模块确实直接提供了函数,你应该调整你的定义来做同样的事情:

declare module "random-string" 
    function randomString(opts?: Object): string;

    export = randomString;

这将允许您像在问题中那样调用它。

【讨论】:

以上是关于随机字符串模块的类型定义异常的主要内容,如果未能解决你的问题,请参考以下文章

ModuleBuildError:模块构建失败:TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。接收类型未定义

自定义异常类型

Java中,关于字符串类型随机验证码 时间类型

在 laravel 中处理异常而不在异常处理程序的渲染方法中进行类型检查异常并且不定义自定义异常?

十模块:time模块(时间)random模块(随机数)

Swift 异常处理