我正在尝试通过npm为我安装的模块定义类型。
这是exported module。我宁愿不对这个文件进行更改,因为我想在不引入BC的情况下合并回原始仓库
/**
* Given a number, return a zero-filled string.
* From http://stackoverflow.com/questions/1267283/
* @param {number} width
* @param {number} number
* @return {string}
*/
module.exports = function zeroFill (width, number, pad) {
if (number === undefined) {
return function (number, pad) {
return zeroFill(width, number, pad)
}
}
if (pad === undefined) pad = '0'
width -= number.toString().length
if (width > 0) return new Array(width + (/\./.test(number) ? 2 : 1)).join(pad) + number
return number + ''
}
这是我为this file
写的定义declare module "zero-fill"{
export default function zeroFill(width:number, num:number, pad?:string|number):string;
export default function zeroFill(width:number):{(num:number, pad?:string|number):string};
}
以下是一个示例用法:
import * as zeroFill from "zero-fill";
zeroFill(2,0);
令我困惑的是,编译器都给了我这个错误:
Cannot invoke an expression whose type lacks a call signature. Type 'typeof "zero-fill"' has no compatible call signatures.
同时它编译打字稿,我看到它在浏览器中运行。什么似乎是问题?
答案 0 :(得分:0)
当你import * as zeroFill
实际上你正在命名模块本身时为零填充。要调用该函数,您必须转到zeroFill.zeroFill(2, 0)
,其中第一个zeroFill
是导入别名,第二个zeroFill
是函数。
答案 1 :(得分:0)
定义:
declare module "zero-fill" {
function zeroFill(width:number, num:number, pad?:string|number):string
function zeroFill(width:number):{(num:number, pad?:string|number):string}
export = zeroFill
}
用法:
import zeroFill = require("zero-fill")
zeroFill(4, 1) // '0001'
zeroFill(10, 55) // '0000000055'
zeroFill(1, 1) // '1'