8000 update src/v2/guid/typescript.md (#232) · vuejs/jp.vuejs.org@8f3fc8d · GitHub
[go: up one dir, main page]

Skip to content

Commit 8f3fc8d

Browse files
Kaorun343kazupon
authored andcommitted
update src/v2/guid/typescript.md (#232)
* update src/v2/guid/typescript.md * 修正
1 parent eecc797 commit 8f3fc8d

File tree

1 file changed

+55
-14
lines changed

1 file changed

+55
-14
lines changed

src/v2/guide/typescript.md

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,43 +4,84 @@ type: guide
44
order: 25
55
---
66

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 パッケージ内の公式型宣言
814

915
静的型システムは、特にアプリケーションが成長するに伴い、多くの潜在的なランタイムエラーを防止するのに役立ちます。そのため、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) も同様に提供しています。
1016

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+
```
1235

13-
``` ts
36+
`allowSyntheticDefaultImports` オプションにより以下の記述が可能となることに留意してください:
37+
38+
``` js
39+
import Vue from 'vue'
40+
```
41+
42+
これは以下の記述の代わりとなるものです:
43+
44+
``` js
1445
import Vue = require('vue')
1546
```
1647

17-
これにより、すべてのメソッド、プロパティ、およびパラメータが型チェックされます。例えば、`template` コンポーネントのオプションを `tempate` (`l` が欠けている)と間違えた場合、TypeScript コンパイラはコンパイル時にエラーメッセージを出力します。[Visual Studio Code](https://code.visualstudio.com/) のような、TypeScript を使用できるエディタを使用している場合、コンパイルする前にこれらのエラーをキャッチすることができます:
48+
推奨しているのは前者(ES モジュール構文)です。なぜなら推奨している素のES モジュールのやり方と変わらず、そして将来的に全ての公式で提供する型宣言を ES モジュール形式とするように移行しようと考えているからです。
1849

19-
![Visual Studio Code での TypeScript による型エラー](/images/typescript-type-error.png)
50+
加えて、もし webpack 2 と共に TypeScript を使用しているならば、以下の設定も推奨します:
2051

21-
### コンパイルオプション
52+
``` js
53+
{
54+
"compilerOptions": {
55+
// ... 他のオプションは除外しています
56+
"module": "es2015",
57+
"moduleResolution": "node"
58+
}
59+
}
60+
```
2261

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 を利用できます
2463

25-
### Vue の型宣言へのアクセス
64+
より詳細なことについては [TypeScript compiler options docs](https://www.typescriptlang.org/docs/handbook/compiler-options.html) を見てください。
2665

27-
Vue の型で独自のコードにアノテート (annotate) したい場合は、Vue のエクスポートされたオブジェクトでそのコードにアクセスできます。例えば、以下は (`.vue` ファイルにおいて) エクスポートされたコンポーネントオプションオブジェクトにアノテートします:
66+
## Vue の型宣言の利用
67+
68+
Vue の型定義はたくさんの便利な[型宣言](https://github.com/vuejs/vue/blob/dev/types/index.d.ts)をエクスポートしています。例えば、例えば、以下は (`.vue` ファイルにおいて) エクスポートされたコンポーネントオプションオブジェクトにアノテートします:
2869

2970
``` ts
30-
import Vue = require('vue')
71+
import Vue, { ComponentOptions } from 'vue'
3172

3273
export default {
3374
props: ['message'],
3475
template: '<span>{{ message }}</span>'
35-
} as Vue.ComponentOptions<Vue>
76+
} as ComponentOptions<Vue>
3677
```
3778

3879
## クラススタイルの Vue コンポーネント
3980

4081
Vue のコンポーネントオプションは容易に型でアノテートできます:
4182

4283
``` ts
43-
import Vue = require('vue')
84+
import Vue, { ComponentOptions } from 'vue'
4485

4586
// コンポーネントの型を宣言
4687
interface MyComponent extends Vue {
@@ -64,7 +105,7 @@ export default {
64105
}
65106
// エクスポートされたオプションオブジェクトに
66107
// MyComponent 型を明示的にアノテートする必要があります
67-
} as Vue.ComponentOptions<MyComponent>
108+
} as ComponentOptions<MyComponent>
68109
```
69110

70111
残念ながら、ここではいくつかの制限があります:
@@ -75,7 +116,7 @@ export default {
75116
幸いにも、[vue-class-component](https://github.com/vuejs/vue-class-component)は、これらの問題を両方解決できます。これは公式ライブラリで、`@Component` デコレータでコンポーネントをネイティブな JavaScript クラスとして宣言することができます。例として、上記のコンポーネントを書き直してみましょう:
76117

77118
``` ts
78-
import Vue = require('vue')
119+
import Vue from 'vue'
79120
import Component from 'vue-class-component'
80121

81122
// @Component デコレータはクラスが Vue コンポーネントであることを示します

0 commit comments

Comments
 (0)
0