2017-04-14 16 views
19

InjectionToken एंगुलर 4 और OpaqueToken में पेश किया गया था जिसे बहिष्कृत किया गया था।कोणीय 2 ओपेक टोकन बनाम कोणीय 4 इंजेक्शन टोकन

According to the manual, यह

const numberToken = new InjectionToken<number>('number'); 

टाइप टोकन के लिए untyped टोकन के लिए के रूप में

const anyToken = new InjectionToken('any'); 

इस्तेमाल किया जा माना जाता है, और।

हालांकि, टाइप किए गए टोकन को अभी भी इंजेक्शन दिया जा सकता है और इसे इंजेक्शन दिए जाने पर विभिन्न प्रकार के साथ उपयोग किया जा सकता है, टाइपस्क्रिप्ट इसके साथ ठीक रहेगा, है ना?

constructor(@Inject(numberToken) any, @Inject(numberToken) string: string) { ... } 

InjectionToken टाइपस्क्रिप्ट प्रकार प्रणाली से लाभ कैसे प्राप्त किया जाना चाहिए?

OpaqueToken क्यों दोहराया गया था यदि उन दोनों के बीच कोई व्यावहारिक अंतर नहीं है?

उत्तर

16

InjectionToken के आंतरिक उपयोग, उदाहरण के लिए, here के लिए के आधार पर, मुझे लगता है InjectionToken आप लाभ जाँच टाइप करते injector उदाहरण के माध्यम से एक निर्भरता हो रही देता है:

import {Component, InjectionToken, Injector} from "@angular/core"; 
interface AppConfig { 
    name: string; 
} 

let APP_CONFIG = new InjectionToken<AppConfig>('app.config'); 
let appConfig: AppConfig = {name: 'Cfg'}; 

@Component({ 
    ... 
    providers: [{provide: APP_CONFIG, useValue: appConfig}] 
}) 
export class TestComponent { 
    constructor(injector: Injector) { 
     const config = injector.get(APP_CONFIG); 
     config.s = 'd'; 
      ^^^^^ - Error:(14, 16) TS2339:Property 's' does not exist on type 'AppConfig'. 
    } 
} 
संबंधित मुद्दे