@@ -4,43 +4,84 @@ type: guide
4
4
order : 25
5
5
---
6
6
7
- ## 公式宣言ファイル
7
+ ## TS と Webpack 2ユーザに向けた、2.2における重要な変更のお知らせ
8
+
9
+ Vue 2.2 からは 配布ファイルを ES モジュール形式でエクスポートするようにしました。これは webpack 2 が標準で使用する形式です。残念ながら、この変更は意図しないところで破壊的変更をもたらしてしまいました。なぜなら TypeScript と webpack 2 を組み合わせた時、 ` import Vue = require('vue') ` は Vue そのものではなく総合的な ES モジュールのオブジェクトを返すからです。
10
+
11
+ 将来的には全ての公式で提供する型宣言を、ES モジュール形式でエクスポートするようにしようと考えています。将来性を考えた[ 推奨構成] ( #推奨構成 ) を以下に示しているのでご覧ください。
12
+
13
+ ## NPM パッケージ内の公式型宣言
8
14
9
15
静的型システムは、特にアプリケーションが成長するに伴い、多くの潜在的なランタイムエラーを防止するのに役立ちます。そのため、Vue は [ TypeScript] ( https://www.typescriptlang.org/ ) 向けに[ 公式型宣言] ( https://github.com/vuejs/vue/tree/dev/types ) を提供しており、Vue コアだけでなく [ Vue Router] ( https://github.com/vuejs/vue-router/tree/dev/types ) と [ Vuex] ( https://github.com/vuejs/vuex/tree/dev/types ) も同様に提供しています。
10
16
11
- これらは、[ NPM で公開] ( https://unpkg.com/vue/types/ ) されており、Vue によって宣言が自動的にインポートされるので、` Typings ` のような外部ツールは必要ありません。つまり、以下のように単純です:
17
+ これらは [ NPM に公開] ( https://unpkg.com/vue/types/ ) されており、そして最新の TypeScript は NPM パッケージ内の型宣言を解決する方法を知っています。つまり、NPM でインストールした時、TypeScript を Vue と共に使うための追加のツールを必要としません。
18
+
19
+ ## 推奨構成
20
+
21
+ ``` js
22
+ // tsconfig.json
23
+ {
24
+ " compilerOptions" : {
25
+ // ... 他のオプションは除外しています
26
+ " allowSyntheticDefaultImports" : true ,
27
+ " lib" : [
28
+ " dom" ,
29
+ " es5" ,
30
+ " es2015.Promise"
31
+ ]
32
+ }
33
+ }
34
+ ```
12
35
13
- ``` ts
36
+ ` allowSyntheticDefaultImports ` オプションにより以下の記述が可能となることに留意してください:
37
+
38
+ ``` js
39
+ import Vue from ' vue'
40
+ ```
41
+
42
+ これは以下の記述の代わりとなるものです:
43
+
44
+ ``` js
14
45
import Vue = require(' vue' )
15
46
```
16
47
17
- これにより、すべてのメソッド、プロパティ、およびパラメータが型チェックされます。例えば、 ` template ` コンポーネントのオプションを ` tempate ` ( ` l ` が欠けている)と間違えた場合、TypeScript コンパイラはコンパイル時にエラーメッセージを出力します。 [ Visual Studio Code ] ( https://code.visualstudio.com/ ) のような、TypeScript を使用できるエディタを使用している場合、コンパイルする前にこれらのエラーをキャッチすることができます:
48
+ 推奨しているのは前者(ES モジュール構文)です。なぜなら推奨している素のES モジュールのやり方と変わらず、そして将来的に全ての公式で提供する型宣言を ES モジュール形式とするように移行しようと考えているからです。
18
49
19
- ![ Visual Studio Code での TypeScript による型エラー ] ( /images/typescript-type-error.png )
50
+ 加えて、もし webpack 2 と共に TypeScript を使用しているならば、以下の設定も推奨します:
20
51
21
- ### コンパイルオプション
52
+ ``` js
53
+ {
54
+ " compilerOptions" : {
55
+ // ... 他のオプションは除外しています
56
+ " module" : " es2015" ,
57
+ " moduleResolution" : " node"
58
+ }
59
+ }
60
+ ```
22
61
23
- Vue の宣言ファイルには ` --lib DOM,ES5,ES2015.Promise ` による [ コンパイラオプション ] ( https://www.typescriptlang.org/docs/handbook/compiler-options.html ) が必要です。このオプションを ` tsc ` コマンドに渡すか、それと同等のものを ` tsconfig.json ` ファイルに追加することができます 。
62
+ このようにすることで TypeScript に対して ES モジュールの import 文をそのまま残すように伝えることができ、そうすると、webpack 2 は ES モジュール をベースとした tree-shaking を利用できます 。
24
63
25
- ### Vue の型宣言へのアクセス
64
+ より詳細なことについては [ TypeScript compiler options docs ] ( https://www.typescriptlang.org/docs/handbook/compiler-options.html ) を見てください。
26
65
27
- Vue の型で独自のコードにアノテート (annotate) したい場合は、Vue のエクスポートされたオブジェクトでそのコードにアクセスできます。例えば、以下は (` .vue ` ファイルにおいて) エクスポートされたコンポーネントオプションオブジェクトにアノテートします:
66
+ ## Vue の型宣言の利用
67
+
68
+ Vue の型定義はたくさんの便利な[ 型宣言] ( https://github.com/vuejs/vue/blob/dev/types/index.d.ts ) をエクスポートしています。例えば、例えば、以下は (` .vue ` ファイルにおいて) エクスポートされたコンポーネントオプションオブジェクトにアノテートします:
28
69
29
70
``` ts
30
- import Vue = require ( ' vue' )
71
+ import Vue , { ComponentOptions } from ' vue'
31
72
32
73
export default {
33
74
props: [' message' ],
34
75
template: ' <span>{{ message }}</span>'
35
- } as Vue . ComponentOptions <Vue >
76
+ } as ComponentOptions <Vue >
36
77
```
37
78
38
79
## クラススタイルの Vue コンポーネント
39
80
40
81
Vue のコンポーネントオプションは容易に型でアノテートできます:
41
82
42
83
``` ts
43
- import Vue = require ( ' vue' )
84
+ import Vue , { ComponentOptions } from ' vue'
44
85
45
86
// コンポーネントの型を宣言
46
87
interface MyComponent extends Vue {
@@ -64,7 +105,7 @@ export default {
64
105
}
65
106
// エクスポートされたオプションオブジェクトに
66
107
// MyComponent 型を明示的にアノテートする必要があります
67
- } as Vue . ComponentOptions <MyComponent >
108
+ } as ComponentOptions <MyComponent >
68
109
```
69
110
70
111
残念ながら、ここではいくつかの制限があります:
@@ -75,7 +116,7 @@ export default {
75
116
幸いにも、[ vue-class-component] ( https://github.com/vuejs/vue-class-component ) は、これらの問題を両方解決できます。これは公式ライブラリで、` @Component ` デコレータでコンポーネントをネイティブな JavaScript クラスとして宣言することができます。例として、上記のコンポーネントを書き直してみましょう:
76
117
77
118
``` ts
78
- import Vue = require ( ' vue' )
119
+ import Vue from ' vue'
79
120
import Component from ' vue-class-component'
80
121
81
122
// @Component デコレータはクラスが Vue コンポーネントであることを示します
0 commit comments