मैं जानता हूँ कि अगर यह इंटरफेस के साथ संभव है के रूप में इंटरफ़ेस रनटाइम पर उपलब्ध नहीं होगा (जावास्क्रिप्ट इंटरफ़ेस के बारे में पता नहीं है न)। लेकिन यह सार वर्गों का उपयोग करके किया जा सकता है।
//abstract-parent-service.ts
export class DatabaseService{
getService:()=>string;
}
//hibernate.service.ts
import {DatabaseService} from "./abstract-parent-service";
export class HibernateService implements DatabaseService{
constructor() { }
getService() {
return "i am hibernate";
}
}
//jdbc.service.ts
import {DatabaseService} from "./abstract-parent-service";
export class JDBCService implements DatabaseService{
constructor() { }
getService() {
return "i am Jdbc";
}
}
// cmp-a.component.ts
import {DatabaseService} from "./abstract-parent-service";
import {HibernateService} from "./hibernate.service";
@Component({
selector: 'cmp-a',
template: `<h1>Hello Hibernate</h1>`,
providers: [{provide: DatabaseService, useClass: HibernateService}]
})
export class CmpAComponent {
constructor (private databaseService: DatabaseService) {
console.log("Database implementation in CompA :"+this.databaseService.getService());
}
}
क्योंकि वे पहले से ही DatabaseService साथ शादी कर ली है
//cmp-b.component.ts
import {DatabaseService} from "./abstract-parent-service";
import {HibernateService} from "./hibernate.service";
@Component({
selector: 'cmp-b',
template: `<h1>Hello Jdbc</h1>`,
providers: [{provide: DatabaseService, useClass: JDBCService}]
})
export class CmpAComponent {
constructor (private databaseService: DatabaseService) {
console.log("Database implementation in CompA :"+this.databaseService.getService());
}
}
लेकिन इस कार्यान्वयन के साथ समस्या यह HibernateService और JDBCService अब किसी अन्य वर्ग का विस्तार करने में सक्षम नहीं हैं ।
class A{
constructor(){
console.log("in A");
}
}
class B extends A{
constructor(){
super();
console.log("in B");
}
}
class C extends A{
constructor(){
super();
console.log("in C");
}
}
let c = new C();
//This thing is not possible in typescript
class D extends B, C{//error: Classes can only extend a single class
constructor(){
super();// which constructor B or C
console.log("in D");
}
}
आप डि के लिए इस पद्धति का उपयोग कर रहे हैं, तो यह सुनिश्चित कर लें कि आपके बच्चे स्तरीय सेवाएं भविष्य में किसी भी अन्य कार्यक्षमता बढ़ाने के लिए नहीं जा रहे हैं।
स्रोत
2016-07-16 07:44:01
'नया ओपेक टोकन (" लॉग इन सेवा ") क्यों 'लॉग इन सेवा' पास हो रही है और' ILoginService' नहीं है? –