Hur importerar man en TypeScript-klass i JavaScript?


Så här importerar jag app.config.ts-klassen i TypeScript och använder den. Hur importerar jag samma AppConfig-klass i en Javascript-fil (config.js) och får åtkomst till metoden getConfig?

service.ts

import { AppConfig } from '../app.config';
constructor(private http: Http, private config: AppConfig) {
    this.dataURL = this.config.getConfig('restApi') + '/api/getdata/'
    console.log(this.dataURL)
}

Svar #1

Jag vet inte exakt vad du frågar, så jag har delat upp det i två delar:

Om du försöker importera en Typescript-fil till en JavaScript-fil

Den bästa lösningen skulle vara att byta namn på din config.js till config.ts och behandla den som en TypeScript-fil.

d.v.s. om du har detta:

export class AppConfig {
  foo: string;
  bar: number;
}

Och i din config.js har du detta:

export const Config = {
  foo: 'Hello World',
  bar: 42
}

men jag antar att du vill ha något i stil med:

import { AppConfig } from './app.config'

export const Config: AppConfig = {
  foo: 'Hello World',
  bar: 42
}

Då kan du bara byta namn på config.js till config.ts. Det måste ändå vara en typescript-fil för typkontroll (om du inte sätter allowJs-regeln i tsconfig.json, men även då tror jag inte att det är smart att importera .ts-filer i .js-filer).

Om du försöker importera en Javascript-fil (eller något) dynamiskt från din URL

Att importera JavaScript-filer dynamiskt fungerar inte riktigt i webbläsaren av ett par tekniska skäl, inte minst säkerhet, men också eftersom ES6:s "import" (eller nodes "require") inte ingår i webbläsarstandarden.

Istället rekommenderar jag att du konverterar din konfiguration till en JSON-fil och använder JavaScripts inbyggda JSON.parse för att parsa den. D.v.s:

http.get(this.dataUrl).toPromise().then(response => {
  let config = null;
  try {
    config = JSON.parse(response.data);
  } catch (e) {
    console.error("Couldn't parse response!");
  }
  this.config = new AppConfig(config); // See note
}

Eller något i den stilen.

Observera: Jag antar att du har både en kopia och en standardkonstruktor för din AppConfig-klass. Om du inte har det, kan du skapa en, skapa en parse-funktion eller något liknande.

Relaterade artiklar