为护照抽搐电视

时间:2018-10-13 23:15:57

标签: node.js typescript

我正在尝试为package-twitchtv软件包创建一个打字稿定义文件,但似乎无法找到它来查找定义。

示例定义文件:

/// <reference types="passport"/>

import passport = require('passport');
import express = require('express');

interface Profile extends passport.Profile {
    id: string;
    username: string;
    displayName: string;
    email: string;

    _raw: string;
    _json: any;
}

interface IStrategyOptionBase {
    clientID: string;
    clientSecret: string;
    callbackURL: string;
    scope: string;
}

interface IStrategyOption extends IStrategyOptionBase {
    passReqToCallback?: false;
}

interface IStrategyOptionWithRequest  extends IStrategyOptionBase {
    passReqToCallback: true;
}

declare class Strategy extends passport.Strategy {
    constructor(options: IStrategyOption,
        verify: (accessToken: string, refreshToken: string, profile: Profile, done: (error: any, user?: any) => void) => void);
    constructor(options: IStrategyOptionWithRequest,
        verify: (req: express.Request, accessToken: string, refreshToken: string, profile: Profile, done: (error: any, user?: any) => void) => void);

    name: string;
    authenticate(req: express.Request, options?: Object): void;
}

导入方法:

import { Strategy as TwitchStrategy } from 'passport-twitchtv';

我收到错误消息:“找不到模块'passport-twitchtv'的声明文件”。

如果我将文件拖放到node_modules / @ types / passport-twitchtv中,则可以正常运行,但是我无法通过打字稿找到.d.ts文件。

我试图在tsconfig.json中的editorOptions中添加一个typeRoots,添加一个types.json文件,并在包文件中添加“ typings”:“ ./typings/index”。我尝试的一切似乎都没有效果。

不确定是否应该在不位于node_modules / @ types文件夹中时声明该模块。

1 个答案:

答案 0 :(得分:1)

实际上,您的声明文件必须可以通过正常的模块解析过程找到,或者您需要这样声明模块:

declare module "passport-twitchtv" {
    // All your original code:
    import passport = require('passport');
    import express = require('express');

    interface Profile extends passport.Profile {
        // ...
    }
    // etc.
}

模块解析过程在node_modules/@types中进行查找(尽管手动修改该目录是不好的,因为npm可能会使您的更改无效),并且您可以使用{{ 1}}和baseUrl编译器选项;参见the documentation