Vue プロジェクトで TS (TypeScript) を使用するための入門チュートリアル

Vue プロジェクトで TS (TypeScript) を使用するための入門チュートリアル

最近、プロジェクトでは、ts を使用して元の vue プロジェクトを変換する必要があります。これは、中規模および大規模プロジェクトの開発トレンドになるはずです。私は優れた入門チュートリアルを見て、それをいくつかの拡張レコードと組み合わせました。インストールからVueコンポーネントの記述まで解説した記事なので、入門に最適です。

1. Typescriptの紹介

npm インストール vue-class-component vue-property-decorator --save
npm で ts-loader typescript tslint tslint-loader tslint-config-standard --save-dev をインストールします。

vue-class-component : vue を拡張して TypeScript をサポートし、宣言的な方法で ts をサポートします。

vue-property-decorator : vue-class-component に基づいてより多くのデコレータを拡張します

ts-loader : webpack が ts ファイルを認識できるようにします

tslint-loader : tslintはファイルのエンコーディングを制限するために使用されます

tslint-config-standard : tslint は標準のスタイル制約を設定します

2. 設定ファイル webpack 設定

設定場所はプロジェクトによって異なります。プロジェクトが vue cli 3.0 で作成された場合は、vue.config.js で設定する必要があります。3.0 未満のバージョンの場合は、webpack.base.conf で設定する必要があります。 (以下の手順はwebpack.base.confファイルで変更します)

.ts をresolv.extensionsに追加すると、.ts サフィックスを記述せずに ts ファイルをコードに導入できます。

  解決する: {
    拡張子: ['.js', '.vue', '.json', '.ts'],
    エイリアス: {}
  }

module.rulesにtsルールを追加する

モジュール: {
    ルール:
      {
        テスト: /\.ts$/,
        除外: /node_modules/、
        強制: 'pre'、
        ローダー: 'tslint-loader'
      },
      {
        テスト: /\.tsx?$/,
        ローダー: 'ts-loader',
        除外: /node_modules/、
        オプション:
          追加Tsサフィックス: [/\.vue$/]
        }
      }
    ]
  }

tsconfig.json 設定
ts-loader は tsconfig.json ファイルを取得し、その中のルールに従って ts ファイルを解析します。詳細な設定については、https://www.tslang.cn/docs/handbook/tsconfig-json.html を参照してください。
テストプロジェクトのtsconfig.jsonファイルを貼り付けます

{
  // コンパイラオプション "compilerOptions": {
    // 出力ディレクトリ "outDir": "./output",
    // デバッグに使用できるソースマップを含めるかどうか
    "ソースマップ": true,
    // 厳密モードで解析する "strict": false,
    // 使用されるモジュールシステム "module": "esnext",
    // モジュールの処理方法 "moduleResolution": "node",
    // ターゲット ES バージョンをコンパイルして出力します "target": "es5",
    // デフォルトのエクスポートを設定していないモジュールからのデフォルトのインポートを許可する "allowSyntheticDefaultImports": true,
    // 各ファイルを個別のモジュールとして扱う "isolatedModules": false,
    // デコレータを有効にする "experimentalDecorators": true,
    // デザインタイプメタデータを有効にする(リフレクション用)
    "emitDecoratorMetadata": true、
    // エラー "noImplicitAny": false、式と宣言に暗黙の any 型がある場合
    // 関数のすべての戻りパスが値を返すわけではないため、エラーが報告されます。
    "noImplicitReturns": true、
    // tslib から外部ヘルパーライブラリをインポートします: __extends、__rest など。"importHelpers": true,
    // コンパイル中にファイル名を印刷する "listFiles": true,
    // コメントを削除する "removeComments": true,
    "suppressImplicitAnyIndexErrors": true、
    // JavaScript ファイルのコンパイルを許可する "allowJs": true,
    // 非相対モジュール名を解析するためのベースディレクトリ "baseUrl": "./",
    //特殊モジュールのパスを指定する "paths": {
      "jQuery": [
        「node_modules/jquery/dist/jquery」
      ]
    },
    // コンパイル時に導入する必要があるライブラリファイルのリスト "lib": [
      「ドム」、
      "es2015",
      「es2015.約束」
    ]
  }
}

tslint.json 構成は、ディレクトリに新しい tslint.json ファイルを追加します。以前に tslint-config-standard をインストールしたので、tslint-config-standard のルールを直接使用できます。ファイルは次のとおりです。

  {
    "拡張": "tslint-config-standard",
    「グローバル」: {
      「必須」: 真
    }
  }

3. プロジェクトに.tsを認識させる

TypeScriptはデフォルトでは*.vueサフィックスを持つファイルをサポートしていないため、vueプロジェクトに導入する場合はvue-shim.d.tsファイルを作成し、ルートディレクトリに配置する必要があります。

モジュール '*.vue' を宣言します。
  'vue' から Vue をインポートします。
  デフォルトの Vue をエクスポートします。
}

4. Vueコンポーネントの記述

vue コンポーネントのほとんどのメソッドは、ng のインジェクションと同様に、現在定義されているデータを示すために @xxx (デコレータ) を使用するように変更されています。ビジネスロジックの js 部分は ts で直接記述できます。

基本的な書き方

templatestyleの書き方は変わりませんが、 scriptモジュールが変更されました。基本的な書き方は以下のようになります。

<script lang="ts">
「vue-property-decorator」から Component、Vue をインポートします。
@成分
デフォルトのクラスTestをエクスポートし、Vueを拡張します。
  
};
</スクリプト>
  • lang="ts" : scriptステートメントの現在の言語はtsです
  • @Component : このクラスがvueコンポーネントであることを示します
  • export default class Test extends Vue : vue を継承する現在のコンポーネントクラスをエクスポートします

data() でデータを定義する

data内のデータは、元のdata()メソッドからオブジェクト内で直接定義されるように変更されています。

デフォルトのクラスTestをエクスポートし、Vueを拡張します。
 公開メッセージ1: 文字列 = "heimayu";
 public message2: string = "本当に美しいですね";
}

小道具

Propsは、次のように記述できるデコレータを使用する必要があるため、データほど快適ではありません。

@プロパティ()
propA:文字列

@プロパティ()
propB:数値

$emit値

パラメータなし

 // 元の記述: this.$emit('bindSend')
  // ここで this.bindSend() と記述します
  // 複数の定義 @Emit()
  bindSend():文字列{
      このメッセージを返す
  }

パラメータ付きメソッド

  // 元の記述: this.$emit('bindSend', msg)
  // 直接書きます: this.bindSend(msg)
  // @Emit() の下に複数の定義があります
  bindSend(メッセージ:文字列){
      // 何かをする
  }

パラメータ付きで発行する

  // ここで、test はコンポーネント参照を変更する @ イベント名です。この場合、@bindSend2 の代わりに @test と記述する必要があります。
  @Emit('テスト)
  プライベートbindSend2(){
      
  }

観測データを見る

  //原文を見る:{}

  @Watch('propA',{
      深い:本当
  })
  テスト(新しい値:文字列、古い値:文字列){
      console.log('propA の値が変更されました' + newValue);
  }

計算されたプロパティ

パブリック get computedMsg(){
      return '計算されたプロパティはここにあります' + this.message;
 }
パブリックセットcomputedMsg(メッセージ: 文字列) {
 }

完全なコード例

<テンプレート>
  <div class="テストコンテナ">
    {{メッセージ}}
    <input type="button" value="クリックして親メソッドをトリガー" @click="bindSend"/>
    <input type="button" value="クリックして親メソッドをトリガー" @click="handleSend"/>
    <input type="button" value="クリックして親メソッドをトリガー" @click="bindSend2"/>
    <!-- <こんにちは></こんにちは> -->
  </div>
</テンプレート>
<script lang="ts">
「vue-property-decorator」から { Component、Prop、Vue、Watch、Emit } をインポートします。
「./HelloWorld.vue」からHelloをインポートします。
// このクラスがvueコンポーネントであることを示す @Component({
  コンポーネント:
    こんにちは
  }
})
デフォルトのクラスTestをエクスポートし、Vueを拡張します。
  // 元のデータのデータが展開され、ここに書き込まれます public message: string = "asd";
  //元のプロパティのデータを展開して、@Prop({
    タイプ: 数値、
    デフォルト: 1,
    必須: false
  })
  propA?: 数字
  @プロパティ()
  propB:文字列
  //元の計算値
  パブリック get computedMsg(){
      return '計算されたプロパティはここにあります' + this.message;
  }
  パブリックセットcomputedMsg(メッセージ: 文字列) {
  }
  //元のウォッチ属性 @Watch('propA',{
      深い:本当
  })
  パブリックテスト(新しい値:文字列、古い値:文字列){
      console.log('propA の値が変更されました' + newValue);
  }
  // 以前は、親に値を渡す必要がある場合、メソッド内でのみemitを使用できました。現在は@Emit()を処理するためにemitを使用する必要があります。
  プライベートbindSend():文字列{
      このメッセージを返す
  }
  @エミット()
  プライベートbindSend1(msg:文字列,love:文字列){
      // 処理したくない場合は、次のように記述する必要はありません。パラメータは自動的に返されます // msg += 'love';
    // メッセージを返します。
  }
  //メソッド内の元のメソッドがレイアウトされます public handleSend():void {
      this.bindSend1(this.message、'love');
  }
  // ここでのemitのパラメータは、前の$emit('parent defined method')と同様に、親が受け入れるものを示します。
  @Emit('テスト')
  プライベートbindSend2(){
      'これはテストで受け入れられます' を返します。
  }
}
</スクリプト>

これで、vue プロジェクトで ts (typescript) を使用するための入門チュートリアルに関するこの記事は終了です。より関連性の高い vue typescript 入門コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • TypeScript 基本チュートリアル: トリプルスラッシュ命令
  • Vue の新しいパートナー TypeScript クイックスタート実践記録
  • Vue 3.0 以前の TypeScript ベストプラクティスの詳細な説明
  • TypeScript 入門 - インターフェース
  • TypeScript 基本データ型
  • TypeScript 入門

<<:  Docker 経由で wsl の tar ファイルを作成する方法

>>:  テーブルセルの幅tdの設定は無効であり、内部コンテンツによって常に引き伸ばされます

推薦する

jQuery カスタム虫眼鏡効果

この記事の例では、jQueryのカスタム虫眼鏡効果の具体的なコードを参考までに共有しています。具体的...

Linux の一般的なコマンド chmod を使用して、ファイルの権限 777 と 754 を変更します。

よく使用されるコマンドは次のとおりです。 chmod 777 文件或目錄例: chmod 777 /...

JavaScript でローカル変数をグローバル変数に変換する方法

まず関数の自己呼び出しを知る必要がある関数の自己呼び出し - 自己呼び出し関数1 回限りの関数 - ...

ページにスクロールバーが表示されたときに、スクロールバーがページ幅に影響しないようにする方法

本体の幅をウィンドウの幅に設定します(次のスクリプトで制御されます) $("body&qu...

デジタル時計効果を実現するJavaScript

この記事では、デジタル時計効果を実現するためのJavaScriptの具体的なコードを参考までに紹介し...

div画像マーキーシームレス接続実装コード

コードをコピーコードは次のとおりです。 <html> <ヘッド> <ス...

血の写輪眼と輪廻眼の特殊効果コードを実現するためのHTML+CSS

結果 (完全なコードは下部にあります): 実装は難しくありませんが、繰り返しコードが多くなります。実...

Linux での VMWare15.5 のインストールに関するチュートリアル

Linux に VMWare をインストールするには、公式 Web サイト https://www....

CSS フォーム検証機能の実装コード

レンダリング原理フォーム要素には、正規表現(携帯電話番号、メールアドレス、IDカードなど)をカスタマ...

CocosCreator 学習モジュールスクリプト

Cocos Creator モジュラースクリプトCocos Creator を使用すると、コードを複...

Dockerサーバーのストレージリソースプール不足問題の解決

目次1. 問題の説明2. 問題分析3. 問題解決1. Dockerのディスク使用量を確認する2. 再...

DockerコンテナにPythonアプリケーションをデプロイするプロセスの分析

シンプルなアプリケーションの展開1. ディレクトリ構造: └── Pythonpro #ディレクトリ...

HTMLバージョン宣言DOCTYPEタグ

通常のウェブサイトのソースコードを開くと、ソースコードは<!DOCTYPE htmlで始まる必...

Vue が Ref を使用してレベル間でコンポーネントを取得する手順

VueはRefを使用してレベル間でコンポーネントインスタンスを取得します例の紹介開発プロセスでは、レ...

srcまたはcss背景画像のurl値はbase64でエンコードされたコードです

ウェブ上の一部の画像の src または CSS 背景画像 URL の後に、data:image/pn...