Erste Schritte mit TS (TypeScript) im Vue-Projekt

Erste Schritte mit TS (TypeScript) im Vue-Projekt

Vor kurzem musste das ursprüngliche Vue-Projekt mithilfe von ts umgewandelt werden. Dies sollte der Entwicklungstrend für mittlere und große Projekte sein. Ich habe ein gutes Einführungstutorial gesehen und es mit einigen Erweiterungsdatensätzen kombiniert. Dieser Artikel erklärt alles von der Installation bis zum Schreiben von Vue-Komponenten und eignet sich für den Einstieg.

1. Einführung in Typescript

npm installiere Vue-Klassenkomponente Vue-Eigenschaftsdekorator --speichern
npm installiere TS-Loader Typescript tslint tslint-loader tslint-config-standard --save-dev

vue-class-component : erweitert vue um Typescript-Unterstützung und unterstützt ts auf deklarative Weise

vue-property-decorator : Erweitern Sie weitere Dekoratoren basierend auf der Vue-Class-Komponente

ts-loader : ermöglicht webpack, ts-Dateien zu erkennen

tslint-loader : tslint wird verwendet, um die Dateikodierung einzuschränken

tslint-config-standard : tslint konfiguriert standardmäßige Stilbeschränkungen

2. Konfigurationsdatei Webpack-Konfiguration

Der Konfigurationsort variiert je nach Projekt. Wenn das Projekt mit Vue CLI 3.0 erstellt wird, muss es in vue.config.js konfiguriert werden. Wenn es eine Version unter 3.0 ist, muss es in webpack.base.conf konfiguriert werden. (Die folgenden Anweisungen müssen in der Datei webpack.base.conf geändert werden)

Fügen Sie .ts zu resolve.extensions hinzu, um ts-Dateien in den Code einzufügen, ohne das Suffix .ts zu schreiben

  lösen: {
    Erweiterungen: ['.js', '.vue', '.json', '.ts'],
    Alias: {}
  }

Fügen Sie TS-Regeln in module.rules hinzu

Modul: {
    Regeln:
      {
        Test: /\.ts$/,
        ausschließen: /node_modules/,
        erzwingen: 'pre',
        Lader: „tslint-loader“
      },
      {
        Test: /\.tsx?$/,
        Lader: „ts-loader“,
        ausschließen: /node_modules/,
        Optionen:
          appendTsSuffixTo: [/\.vue$/]
        }
      }
    ]
  }

tsconfig.json-Konfiguration
ts-loader ruft die Datei tsconfig.json ab und analysiert die ts-Datei entsprechend den darin enthaltenen Regeln. Detaillierte Informationen zur Konfiguration finden Sie unter https://www.tslang.cn/docs/handbook/tsconfig-json.html
Fügen Sie die Datei tsconfig.json des Testprojekts ein

{
  // Compileroptionen "compilerOptions": {
    // Ausgabeverzeichnis "outDir": "./output",
    // Ob eine SourceMap eingeschlossen werden soll, die zum Debuggen verwendet werden kann
    "sourceMap": wahr,
    // Im strikten Modus analysieren "strict": false,
    // Verwendetes Modulsystem "module": "esnext",
    // Wie verarbeite ich Module "moduleResolution": "node",
    // Ziel-ES-Version "target" kompilieren und ausgeben: "es5",
    // Standardimporte von Modulen zulassen, die keinen Standardexport festlegen "allowSyntheticDefaultImports": true,
    // Jede Datei als separates Modul behandeln "isolatedModules": false,
    // Dekoratoren aktivieren "experimentalDecorators": true,
    //Designtyp-Metadaten aktivieren (zur Reflektion)
    "emitDecoratorMetadata": wahr,
    // Fehler "noImplicitAny": false, wenn in Ausdrücken und Deklarationen ein impliziter Typ any vorkommt
    // Nicht alle Rückgabepfade einer Funktion geben einen Wert zurück und es wird ein Fehler gemeldet.
    "noImplicitReturns": wahr,
    // Externe Hilfsbibliotheken aus tslib importieren: wie __extends, __rest usw. "importHelpers": true,
    // Dateinamen während der Kompilierung drucken "listFiles": true,
    // Kommentare entfernen "removeComments": true,
    "suppressImplicitAnyIndexErrors": wahr,
    // Kompilierung von Javascript-Dateien zulassen "allowJs": true,
    // Basisverzeichnis zum Parsen nicht relativer Modulnamen "baseUrl": "./",
    //Pfad von Spezialmodulen angeben "paths": {
      "jquery": [
        „node_modules/jquery/dist/jquery“
      ]
    },
    // Liste der Bibliotheksdateien, die während der Kompilierung eingeführt werden müssen "lib": [
      "dom",
      "es2015",
      „es2015.promise“
    ]
  }
}

Die tslint.json-Konfiguration fügt eine neue tslint.json-Datei im Verzeichnis hinzu. Da wir tslint-config-standard bereits installiert haben, können wir die Regeln in tslint-config-standard direkt verwenden. Die Datei sieht wie folgt aus:

  {
    "erweitert": "tslint-config-standard",
    "Globale": {
      "erfordern": wahr
    }
  }

3. Lassen Sie das Projekt .ts erkennen

Da TypeScript standardmäßig keine Dateien mit der Endung *.vue unterstützt, müssen Sie beim Einfügen in ein Vue-Projekt eine Datei vue-shim.d.ts erstellen und im Stammverzeichnis ablegen.

Deklariere das Modul '*.vue' {
  importiere Vue von „vue“;
  Standard-Vue exportieren;
}

4. Schreiben von Vue-Komponenten

Die meisten Methoden in Vue-Komponenten werden geändert, um @xxx (Dekorator) zu verwenden, um anzuzeigen, welche Daten aktuell definiert sind, ähnlich der Injektion in ng. Der JS-Teil der Geschäftslogik kann direkt in ts geschrieben werden.

Grundlegendes Schreiben

Die Schreibweise von template und style bleibt unverändert, das script wurde jedoch geändert. Die grundlegende Schreibweise lautet wie folgt:

<script lang="ts">
importiere { Komponente, Vue } von „vue-property-decorator“;
@Komponente
exportiere Standardklasse Test erweitert Vue {
  
};
</Skript>
  • lang="ts" : Die aktuelle Sprache unter script Skriptanweisung ist ts
  • @Component : Gibt an, dass diese Klasse eine Vue-Komponente ist
  • export default class Test extends Vue : exportiert die aktuelle Komponentenklasse, die Vue erbt

Definieren Sie Daten in data()

Die Daten in data werden von der ursprünglichen data() Methode geändert, sodass sie direkt im Objekt definiert werden

exportiere Standardklasse Test erweitert Vue {
 öffentliche Nachricht1: Zeichenfolge = „heimayu“;
 öffentliche Nachricht2: Zeichenfolge = „Es ist wirklich wunderschön“;
}

Requisiten

Props sind nicht so komfortabel wie Daten, da sie Dekoratoren verwenden müssen, die wie folgt geschrieben werden können

@Stütze()
propA:Zeichenfolge

@Stütze()
propB:Nummer

$emit-Wert

Ohne Parameter

 // Ursprünglicher Text: this.$emit('bindSend')
  // Schreiben Sie jetzt einfach this.bindSend()
  // Mehrere Definitionen @Emit()
  bindSend():Zeichenfolge{
      gib diese Nachricht zurück
  }

Methoden mit Parametern

  // Ursprünglicher Text: this.$emit('bindSend', msg)
  // Jetzt direkt schreiben: this.bindSend(msg)
  // Mehrere Definitionen unten @Emit()
  bindSend(msg:Zeichenfolge){
      // etwas tun
  }

mit Parametern ausgeben

  // Hier ist test der Name des @-Ereignisses, das die Komponentenreferenz ändert. In diesem Fall sollten Sie @test statt @bindSend2 schreiben
  @Emit('test)
  private bindSend2(){
      
  }

Beobachtungsdaten ansehen

  //Originaltext watch:{}

  @Watch('propA',{
      tief:wahr
  })
  test(neuerWert:Zeichenfolge,alterWert:Zeichenfolge){
      console.log('propA-Wert geändert' + neuerWert);
  }

Berechnete Eigenschaften

öffentliche erhalten berechneteMsg(){
      return 'Hier ist die berechnete Eigenschaft' + this.message;
 }
öffentliches Set berechneteMsg(Nachricht: Zeichenfolge) {
 }

Vollständiges Codebeispiel

<Vorlage>
  <div Klasse="Testcontainer">
    {{Nachricht}}
    <input type="button" value="Klicken, um übergeordnete Methode auszulösen" @click="bindSend"/>
    <input type="button" value="Klicken, um übergeordnete Methode auszulösen" @click="handleSend"/>
    <input type="button" value="Klicken, um übergeordnete Methode auszulösen" @click="bindSend2"/>
    <!-- <Hallo></Hallo> -->
  </div>
</Vorlage>
<script lang="ts">
importiere { Komponente, Prop, Vue, Watch, Emit } von „vue-property-decorator“;
importiere Hallo aus "./HelloWorld.vue";
// Geben Sie an, dass diese Klasse eine Vue-Komponente ist @Component({
  Komponenten:
    Hallo
  }
})
exportiere Standardklasse Test erweitert Vue {
  // Die Daten in den Originaldaten werden erweitert und hierhin geschrieben. public message: string = "asd";
  //Erweitern Sie die Daten in den ursprünglichen Eigenschaften, um @Prop({ zu schreiben.
    Typ: Nummer,
    Standard: 1,
    erforderlich: false
  })
  propA?: Zahl
  @Stütze()
  propB:Zeichenfolge
  //Ursprünglich berechnet
  öffentliche erhalten berechneteMsg(){
      return 'Hier ist die berechnete Eigenschaft' + this.message;
  }
  öffentliches Set berechneteMsg(Nachricht: Zeichenfolge) {
  }
  //Ursprüngliches Uhrattribut @Watch('propA',{
      tief:wahr
  })
  öffentlicher Test(neuerWert:Zeichenfolge,alterWert:Zeichenfolge){
      console.log('propA-Wert geändert' + neuerWert);
  }
  // Wenn Sie früher einen Wert an das übergeordnete Element übergeben mussten, konnten Sie einfach emit in der Methode verwenden. Jetzt müssen Sie emit verwenden, um @Emit() zu verarbeiten.
  private bindSend():string{
      gib diese Nachricht zurück
  }
  @Emittieren()
  private bindSend1(msg:Zeichenfolge,love:Zeichenfolge){
      // Wenn du es nicht verarbeiten möchtest, brauchst du das Folgende nicht zu schreiben, die Parameter werden automatisch zurückgegeben // msg += 'love';
    // Nachricht zurückgeben;
  }
  //Die ursprüngliche Methode wird in Methoden angelegt public handleSend():void {
      dies.bindSend1(diese.Nachricht,'Liebe');
  }
  // Die Parameter in „emitt“ geben hier an, was das übergeordnete Element akzeptiert, ähnlich wie beim vorherigen $emit('übergeordnet definierte Methode')
  @Emit('Test')
  private bindSend2(){
      return: „Dies kann durch Test akzeptiert werden“;
  }
}
</Skript>

Damit ist dieser Artikel über das Einführungstutorial zur Verwendung von ts (Typescript) in Vue-Projekten abgeschlossen. Weitere relevante Einführungsinhalte zu Vue Typescript finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • TypeScript-Grundlagen-Tutorial: Anweisungen für drei Schrägstriche
  • Der neue TypeScript-Schnellstart-Übungsbericht des Partners Vue
  • Detaillierte Erläuterung der TypeScript-Best Practices vor Vue 3.0
  • TypeScript-Einführung - Schnittstelle
  • Grundlegende TypeScript-Datentypen
  • Einführung in TypeScript

<<:  Detaillierte Erläuterung des Anwendungsfalls für MySQL-Fremdschlüssel (FOREIGN KEY)

>>:  So erstellen Sie eine TAR-Datei von WSL über Docker

Artikel empfehlen

Tutorial zur Installation von MySQL unter Linux

Inhaltsverzeichnis 1. Löschen Sie die alte Versio...

Architektur und Komponentenbeschreibung der privaten Docker-Bibliothek Harbor

In diesem Artikel wird die Zusammensetzung der Ha...

Vue.js implementiert Musikplayer

In diesem Artikel wird der spezifische Code von V...

Schnellstart-Tutorial zum Nginx-Dienst

Inhaltsverzeichnis 1. Einführung in Nginx 1. Was ...

Implementierungscode der HTML-Floating-Promptbox-Funktion

Allgemeine Formulareingabeaufforderungen belegen ...

Detaillierte Erläuterung der Nginx Reverse Proxy WebSocket-Konfiguration

Kürzlich habe ich bei der Arbeit an einem Projekt...

JavaScript Canvas implementiert Tic-Tac-Toe-Spiel

In diesem Artikel wird der spezifische Code von J...

HTML-Lernhinweise – Detaillierte Erklärung der HTML-Syntax (unbedingt lesen)

1. Was ist die HTML-Auszeichnungssprache? HTML is...

So zeichnen Sie eine Mindmap in einem Miniprogramm

Inhaltsverzeichnis Was ist eine Mindmap? Wie zeic...

So verwenden Sie CocosCreator zum Erstellen eines Schießspiels

Analysieren Sie die Produktionsschritte: 1. Resso...

Flexibles Boxmodell von CSS und CSS3 zur Anpassung der Elementbreite (-höhe)

1. CSS realisiert eine feste Breite links und ein...

Detaillierte Erklärung des Overflow-Scrollens zur Lösung des Scroll-Lag-Problems

Vorwort Wenn Sie das Attribut „overflow: scroll“ ...

So installieren Sie MySQL 5.7 manuell auf CentOS 7.4

MySQL-Datenbanken werden häufig verwendet, insbes...