2016-04-25 28 views
0

這裏是我正在做打字的代碼:如何使用默認函數導出爲commonjs模塊創建類型?

https://github.com/jden/objectid/blob/1.1.0/index.js

我到目前爲止已經試過 -

嘗試#1:

declare module "objectid" { 
    interface ObjectId { 
    (): string 
    isValid(objectId: string): boolean 
    } 
    export default ObjectId 
} 

... 
import makeObjectId from 'objectid' // Error TS2304: Cannot find name 'makeObjectId' 

嘗試#2:

declare module "objectid" { 
    interface ObjectId { 
    (): string 
    isValid(objectId: string): boolean 
    } 
    export = ObjectId 
} 

... 
import makeObjectId = require('objectid') 
const id = makeObjectId() // Error TS2304: Cannot find name 'makeObjectId' 

嘗試#3:

declare module "objectid" { 
    export default function makeObjectId(): string 
    export function isValid(objectId: string): boolean 
} 

... 
import makeObjectId = require('objectid') 
const id = makeObjectId() // TypeError: objectid_1.default is not a function 

編輯:工作的人的解決方案,認爲這在未來:

declare module "objectid" { 
    interface ObjectId { 
    (): string 
    isValid(objectId: string): boolean 
    } 
    declare var objectId: ObjectId 
    export = objectId 
} 

... 
import * as makeObjectId from 'objectid' 
const id = makeObjectId() 

回答

1

您可以嘗試在你的d.ts文件中聲明它是這樣的:

declare module "objectid" 
{ 
    interface ObjectId 
    { 
     (): string 
     isValid(objectId: string): boolean 
    } 

    var foo: ObjectId; 

    export default foo; 
} 
+0

這樣做!因爲它是一個.d.ts,所以只聲明'聲明var'而不是'var'。我想這是必要的,所以我輸出一個值(可以被稱爲),而不僅僅是一個類型? – bcherny

相關問題