2017-05-01 7 views
0

npmでインストールしたモジュールのタイプを定義しようとしています。シグネチャを持っている間にタイプにコールシグネチャがない式を呼び出せません

これはexported moduleです。私は元のレポにマージしたいので、私はむしろ、これは私が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}; 
} 

のために書いた定義されており、ここでの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 + '' 
} 

をこのファイルに変更を加えないと思います使用例:

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

同じ問題。あなたはそれを修正しましたか? – novaline

+0

はい、ちょうど私自身の質問に答えました – Loupax

答えて

0

はここで何I ended up doing

定義:

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' 
0

あなたがimport * as zeroFillというとき、実際にはモジュール自体の名前をzeroFillにしています。関数を呼び出すには、zeroFill.zeroFill(2, 0)に行ってください。最初のzeroFillがインポートエイリアスで、2番目のzeroFillが関数です。

+0

私のコンパイルプロセスには本当に間違っているはずです... 'console.log(zeroFill)'を実行すると、コンテナオブジェクトではなく関数自身が含まれています。したがって、 'zeroFill()'を 'zeroFill.zeroFill()'に置き換えると、コンパイラは不平を言い止めますが、アプリケーションがクラッシュします...私が目を覚ました後に再びチェックします... – Loupax

+0

あなた自身で書いた定義ファイルですか?実装に直接対応しているようには見えません。私は、インプリメンテーションのmodule.exportsがむしろ関数自体であるため、エクスポートをデフォルトエクスポート( 'export default function zeroFill')に設定してからデフォルトエクスポート(' zero-fill 'からimport zeroFill)をインポートするべきだと思います(あなたが発見したように)コンテナオブジェクトよりも。 – y2bd

+0

はい、関数をデフォルトとしてエクスポートするとまったく同じエラーが発生します。それに応じて質問を更新しました。 – Loupax

関連する問題