2017-03-27 17 views
8

टाइपप्रति वी 2.1.0टाइपप्रति: विधि स्थिर

हो सकता है मैं निम्नलिखित ServerRouter.ts लिखा

import {Router, Request, Response, NextFunction} from 'express'; 

export class ServerRouter { 
    router: Router; 

    /** 
    * Initialize the ServerRouter 
    */ 
    constructor() { 
    this.router = Router(); 
    this.init(); 
    } 

    /** 
    * GET index page 
    */ 
    public getIndex(req: Request, res: Response, next: NextFunction) { 
    res.render('index'); 
    } 

    /** 
    * Take each handler, and attach to one of the Express.Router's 
    * endpoints. 
    */ 
    init() { 
    this.router.get('/', this.getIndex); 
    } 

} 

// Create the ServerRouter, and export its configured Express.Router 
const serverRouter = new ServerRouter().router; 
export default serverRouter; 

Webstorm निरीक्षण चेतावनी

> विधि स्थिर हो सकता है

getIndex() फ़ंक्शन के बारे में उठाया गया है:

लेकिन

अगर मैं स्थिर

सार्वजनिक स्थिर getIndex()

करने के लिए इसे बदल गया है, मैं एक त्रुटि मिलती है: TS2339 'getIndex' प्रकार 'ServerRouter'

पर मौजूद नहीं है

मुझे क्या बदलना चाहिए?

धन्यवाद प्रतिक्रिया

+0

मुझे लगता है: this.router.get ('/', ServerRouter.getIndex); ठीक होना चाहिए ... यदि हां? क्यूं कर ? (स्पष्टीकरण के लिए कोई लिंक) धन्यवाद – erwin

उत्तर

17

के लिए एक स्थिर विधि एक वर्ग के बजाय एक वस्तु उदाहरण पर मौजूद है। आपको अपने init फ़ंक्शन में this.getIndex से ServerRouter.getIndex को बदलना होगा।

वेबस्टॉर्म सुझाव देता है कि यदि वे किसी भी स्थिति की स्थिति को स्पर्श नहीं करते हैं, तो यह विधि बताती है कि विधि उस स्तर पर मौजूद है जो सभी उस वर्ग के उदाहरणों के लिए सामान्य है।

TypeScript Handbook में static के बारे में आप अधिक जानकारी प्राप्त कर सकते हैं ("स्टेटिक प्रॉपर्टीज" सेक्शन देखें)।

+1

धन्यवाद आपकी बहुत प्रतिक्रिया के लिए बेन ... यह काम करता है टीएस ... हर दिन! – erwin

+0

इस उत्तर के अनुसार [लिंक] (https://stackoverflow.com/a/42600571/3872998) प्रत्यक्ष पहुंच में समस्याएं हैं ... तो सबसे अच्छा अभ्यास कौन सा है ?? मैंने अभी सदस्यों से सभी "स्थैतिक" हटा दिए हैं और इंजेक्शन के साथ सभी अवसरों को ठीक किया है, क्या मुझे वापस लेना चाहिए? –

+0

@ टोनीसमपर मैं उस उत्तर से सहमत हूं और स्थैतिक तरीकों के बजाय सिंगलटन उदाहरण पर निर्भरता इंजेक्शन के साथ जाऊंगा। यह आपके कोड को परीक्षण के साथ-साथ उस उत्तर में वर्णित फायदे को आसान बनाता है। टाइपस्क्रिप्ट के बारे में ज्यादा चिंता न करें, यह बताते हुए कि वे विधियां स्थैतिक हो सकती हैं - एक निर्भरता-इंजेक्शन सिंगलटन इंस्टेंस स्थिर वर्गों के लिए एक वैकल्पिक समाधान है, और यह बिल्कुल कम नहीं है। –