2016-04-25 128 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

相关问题