首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为具有默认导出的模块创建TSD?

如何为具有默认导出的模块创建TSD?
EN

Stack Overflow用户
提问于 2019-10-04 23:07:43
回答 1查看 133关注 0票数 1

我正试图为fscreen.js创建一个TSD,但我很难理解这是一个默认的导出。

根据关于打字本网站的指南,它说:

如果您的模块不可调用或不可构造,请使用module.d.ts文件。

由于情况如此,我使用的是module.d.ts模板

因此,index.d.ts文件看起来如下:

代码语言:javascript
复制
export function requestFullscreen(element: any): void;
export function requestFullscreenFunction(element: any): () => void;
export function exitFullscreen();
export function addEventListener(type: string, handler: () => void, options: any): void;
export var fullscreenEnabled: boolean;
export var fullscreenElement: any;
export var onfullscreenchange: (event: any) => void;
export var onfullscreenerror: (event: any) => void;

消费:

代码语言:javascript
复制
import * as fscreen from 'fscreen';

它编译得很好。但是,当我在运行时检查fscreen的实际值时,如下所示:

我还搜索了其他问题,其他一些帖子建议我在我的TSD中将它定义为:

代码语言:javascript
复制
export default class fscreen {
  fullscreenElement: any;
  ...
}

但是它没有编译,而且它似乎认为fscreen是一个函数?

我也试过这样做:

代码语言:javascript
复制
declare class fscreen {
  fullscreenElement: any;
  fullscreenEnabled: any;
  exitFullscreen: any;
  requestFullscreen: any;  
}
export = fscreen;

像这样进口:

代码语言:javascript
复制
import fscreen = require('fscreen');

但是我又发现了一个问题,它似乎认为它是一个函数,它抛出了这些异常:

代码语言:javascript
复制
TS2339: Property 'requestFullscreen' does not exist on type 'typeof fscreen'.

感觉我就快到了。已经在这件事上浪费了那么多时间,我被困住了。那么,我如何修改我的TSD以便它正确地定义默认的导出呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-05 00:07:34

如果您在import fscreen from 'fscreen'中使用它,那么下面的内容将在一个*.d.ts文件中工作。

代码语言:javascript
复制
/**
 * Associate this type declaration file with the `fscreen` module.
 */
declare module 'fscreen' {

    /**
     * Declare a type for an object with methods and properties.
     */
    type FScreen = {
        requestFullScreen: (element: unknown) => unknown;
        requestFullScreenFunction: (element: unknown) => unknown;
        exitFullScreen: unknown;
        fullscreenPseudoClass: unknown;
        // other code omitted
    };

    /**
     * Declare an object that implements that type.
     */
    const fscreen: FScreen;

    /**
     * Default export that object.
     */
    export default fscreen;
} 

这是我电脑上的结果:

为了简洁起见,我只部分地实现了这个类型,并且我使用了unknown,因为我不熟悉fscreen

此外,为了防止有帮助,下面是我的tsconfig.json文件:

代码语言:javascript
复制
{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs"
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58244032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档