मैं पासपोर्ट-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';

मुझे त्रुटि मिल रही है: "मॉड्यूल 'पासपोर्ट-ट्विचटीवी' के लिए एक घोषणा फ़ाइल नहीं मिल सका"।

अगर मैं फ़ाइल को अपने node_modules/@types/passport-twitchtv में छोड़ देता हूं तो यह काम करता है, लेकिन मैं अन्यथा .d.ts फ़ाइल को खोजने के लिए टाइपस्क्रिप्ट प्राप्त करने में असमर्थ हूं।

मैंने tsconfig.json में कंपाइलरऑप्शन में एक टाइपरूट्स जोड़ने की कोशिश की है, एक टाइपिंग.जेसन फ़ाइल जोड़कर, पैकेज फ़ाइल में "टाइपिंग": "./typings/index" जोड़ना। मैं जो कुछ भी कोशिश करता हूं वह काम करता प्रतीत होता है।

सुनिश्चित नहीं है कि मुझे नोड_मॉड्यूल्स/@ प्रकार फ़ोल्डर में नहीं होने पर मॉड्यूल घोषित करना चाहिए या नहीं।

0
codephobia 14 अक्टूबर 2018, 02:15

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 आपके परिवर्तनों को उड़ा सकता है), और आप इसे baseUrl का उपयोग करके अतिरिक्त स्थानों पर देखने के लिए प्राप्त कर सकते हैं। और paths कंपाइलर विकल्प; दस्तावेज देखें।

1
Matt McCutchen 15 अक्टूबर 2018, 06:12