【问题标题】:How do I write the type definition for a module with a default export如何为具有默认导出的模块编写类型定义
【发布时间】:2017-12-21 00:19:11
【问题描述】:

我想为storybook-router 写一个类型定义。它不需要那么准确,因为这是一个小型开发工具(即anys 是可以接受的),但我什至无法让它工作。

我要表达的是:

import StoryRouter from 'storybook-router';

...其中StoryRouter 是一个匹配来自@types/storybook__react 的接口StoryDecorator 的函数。

我尝试了以下定义文件:

import { StoryDecorator } from '@storybook/react';

declare type StoryRouter = StoryDecorator;

export default StoryRouter;

不幸的是,这会导致以下错误:

TS7016:找不到模块“storybook-router”的声明文件。 '//node_modules/storybook-router/dist/StoryRouter.js' 隐含了一个 'any' 类型。 尝试npm install @types/storybook-router(如果存在)或添加包含declare module 'storybook-router'; 的新声明(.d.ts)文件

但是,如果我使用最后一个示例 (declare module 'storybook-router'),我似乎无法弄清楚如何设置默认导出。

表示这种类型的正确方法是什么?

【问题讨论】:

    标签: typescript definitelytyped type-definition storybook


    【解决方案1】:

    您无需导入 .d.ts 文件,只需声明模块即可。
    通常,它看起来像这样(任何最简单的用例):

    // storybook-router.d.ts
    declare module 'storybook-router' {
        const StoryDecorator:any;
        export default StoryDecorator;
    }
    

    【讨论】:

    • 嗯,谢谢,这行得通,对我来说已经足够了。出于好奇,有没有办法让any 实际上成为@storybook/reactStoryDecorator 的类型?
    • 我很确定有一种方法可以为几乎任何 js 库创建定义文件。我自己也不是专家,即使我必须阅读那门课?因为我从未使用过它。我创建定义文件的常用方法是查找具有类型定义并使用类似方法的库,然后检查它们是如何做到的。顺便说一句,我刚刚找到了这个,这似乎是你要找的:npmjs.com/package/@types/storybook__react
    • 在查找定义时尝试搜索microsoft.github.io/TypeSearch
    • 这些是@storybook/react 的类型定义,而我正在寻找storybook-router 的类型定义——它应该实现 StoryDecorator 从前一个包中。 ..
    猜你喜欢
    • 2016-12-30
    • 2019-08-15
    • 2016-07-24
    • 2017-02-10
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多