2017-05-22 3 views
1

In meinem Code verwendete ich eine Klasse mit dem erstaunlichen Namen MyClass, die eine einzige Methode MyMethod(): void {...} hatte, die eine großartige Funktionalität zur Verfügung stellte. Diese Klasse + Methode wurde an vielen Stellen verwendet.Klasse mit umbenannten Methoden in TypeScript exportieren?

Es gibt jetzt eine brandneue Klasse mit dem Namen BrandNewClass (die ich aufgrund nicht bearbeiten [insert welchem ​​Grund auch immer Sie überzeugen würde]) eine einzige Methode mit BrandNewMethod(): void {...} die gleiche Funktionalität in einer verbesserten Art und Weise bereitstellt.

Um die alte Funktionalität mit der brandneuen zu wechseln, habe ich bereits MyClass (und MyMethod) losgeworden.

Danach kann ich Verweis auf MyClass ändern und MyMethod-BrandNewClass und BrandNewMethodüberall.

Aber ich konnte die Anstrengung erleichtern, wenn ich Reexport BrandNewClass als MyClass und nur MyMethod zu BrandNewMethod ändern.

export { BrandNewClass as MyClass } from 'BrandNewClass'; 

Gibt es eine Möglichkeit weiter die Mühe zu erleichtern und die Wiederausfuhr so ​​konfigurieren, dass der Name des Verfahrens BrandNewMethod auch (zu MyMethod) aliased wird?

Antwort

0

Verwendung weitere .ts-Datei, den Fall zu steuern, an, dass die Datei exports.ts gestattet

import { MyClass } from "./MyClass"; 
import { BrandNewClass } from "./BrandNewClass"; 

export interface IExportClass { 
    ClassInstance: any; 
    DoThisAwesomeFunction: Function; 
} 

export function GetExportClass(isNew: boolean): IExportClass { 
    var instance; 
    if (!isNew) { 
     instance = new MyClass(); 
     return { 
      ClassInstance: instance, 
      DoThisAwesomeFunction: instance.MyMethod 
     } 
    } 
    else { 
     instance = new BrandNewClass(); 
     return { 
      ClassInstance: instance, 
      DoThisAwesomeFunction: instance.BrandNewMethod 
     } 
    } 
} 

Nutzung:

import { GetExportClass, IExportClass } from "./exports"; 

// global setting 
var usingNewMethod: boolean = true; 

var methodDriver: IExportClass = GetExportClass(usingNewMethod); 
methodDriver.DoThisAwesomeFunction(); 
0
export class MyClass extends BrandNewClass { 
    constructor() { 
     super(); 
     console.log("MyClass is deprecated, use BrandNewClass") 
    } 

    public MyMethod() { super.BrandNewMethod(); } 
} 
Verwandte Themen