首页 > 解决方案 > 如何在 TypeScript 中默认导出其他导入类型的对象?

问题描述

我正在尝试为实用程序类的 JavaScript 包提供环境类型定义(比如 Lodash)。我希望用户能够通过以下方式导入模块:

// TypeScript or Babel

import myutils from 'myutils' // myutils = { a: [Function], b: [Function] }
import { a } from 'myutils'   // a: Function
import a from 'myutils/a'     // a: Function

// JavaScript

const myutils = require('myutils') // myutils = { a: [Function], b: [Function] }
const { a } = require('myutils')   // a: Function
const a = require('myutils/a')     // a: Function

代码结构如下:

// a.js
module.exports = () => 'a'
// b.js
module.exports = () => 'b'
// index.js
module.exports = { a: require('./a'), b: require('./b') }

我的问题是我无法为这些编写正确的 TypeScript 环境定义。到目前为止,我有:

// a.d.ts
export default function a(): string
// b.d.ts
export default function b(): string
// index.d.ts
export { default as a } from './a'
export { default as b } from './b'

export default ...what?

我也试过这个没有成功:

// index.d.ts
import a from './a'
import b from './b'

export { a, b }

// Member 'a' implicitly has an 'any' type, but a better type may be inferred from usage.ts(7045)
declare const _default: { a, b }

export default _default

谢谢

标签: typescripttypescript-typings

解决方案


问题是您在执行此操作时正在使用函数ab类型:

declare const _default: { a, b }

改用typeof a应该修复错误:

declare const _default: {
    a: typeof a,
    b: typeof b
}

操场


推荐阅读