From 7784c1dd9637a95c4bc9cbc0e4b91cf4a2f21972 Mon Sep 17 00:00:00 2001 From: ktsn Date: Sun, 11 Dec 2016 23:07:38 +0900 Subject: [PATCH 1/7] add vue + typescript guide --- src/v2/guide/comparison.md | 2 +- src/v2/guide/join.md | 2 +- src/v2/guide/migration-vue-router.md | 2 +- src/v2/guide/migration-vuex.md | 2 +- src/v2/guide/migration.md | 2 +- src/v2/guide/typescript.md | 100 +++++++++++++++++++++++++++ 6 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 src/v2/guide/typescript.md diff --git a/src/v2/guide/comparison.md b/src/v2/guide/comparison.md index 73c947a944..09d57bd4ec 100644 --- a/src/v2/guide/comparison.md +++ b/src/v2/guide/comparison.md @@ -1,7 +1,7 @@ --- title: Comparison with Other Frameworks type: guide -order: 28 +order: 29 --- This is definitely the most difficult page in the guide to write, but we do feel it's important. Odds are, you've had problems you tried to solve and you've used another library to solve them. You're here because you want to know if Vue can solve your specific problems better. That's what we hope to answer for you. diff --git a/src/v2/guide/join.md b/src/v2/guide/join.md index 1fef6c8516..93447c8645 100644 --- a/src/v2/guide/join.md +++ b/src/v2/guide/join.md @@ -1,7 +1,7 @@ --- title: Join the Vue.js Community! type: guide -order: 29 +order: 30 --- Vue's community is growing incredibly fast and if you're reading this, there's a good chance you're ready to join it. So... welcome! diff --git a/src/v2/guide/migration-vue-router.md b/src/v2/guide/migration-vue-router.md index 945f4e044d..d9d63c6a0d 100644 --- a/src/v2/guide/migration-vue-router.md +++ b/src/v2/guide/migration-vue-router.md @@ -1,7 +1,7 @@ --- title: Migration from Vue Router 0.7.x type: guide -order: 26 +order: 27 --- > Only Vue Router 2 is compatible with Vue 2, so if you're updating Vue, you'll have to update Vue Router as well. That's why we've included details on the migration path here in the main docs. For a complete guide on using the new Vue Router, see the [Vue Router docs](http://router.vuejs.org/en/). diff --git a/src/v2/guide/migration-vuex.md b/src/v2/guide/migration-vuex.md index 28d89543db..1e5aa28bdf 100644 --- a/src/v2/guide/migration-vuex.md +++ b/src/v2/guide/migration-vuex.md @@ -1,7 +1,7 @@ --- title: Migration from Vuex 0.6.x to 1.0 type: guide -order: 27 +order: 28 --- > Vuex 2.0 is released, but this guide only covers the migration to 1.0? Is that a typo? Also, it looks like Vuex 1.0 and 2.0 were released simultaneously. What's going on? Which one should I use and what's compatible with Vue 2.0? diff --git a/src/v2/guide/migration.md b/src/v2/guide/migration.md index 5640d256d4..266ee20820 100644 --- a/src/v2/guide/migration.md +++ b/src/v2/guide/migration.md @@ -1,7 +1,7 @@ --- title: Migration from Vue 1.x type: guide -order: 25 +order: 26 --- ## FAQ diff --git a/src/v2/guide/typescript.md b/src/v2/guide/typescript.md new file mode 100644 index 0000000000..9367ba0a1d --- /dev/null +++ b/src/v2/guide/typescript.md @@ -0,0 +1,100 @@ +--- +title: TypeScript +type: guide +order: 25 +--- + +## Official Declaration Files + +There are official declaration files for Vue, vue-router and vuex. You do not have to use external tools like `typings` to use them since they are published via npm. You can install Vue's declarations with `npm install vue`. Then, all declarations can be imported with `import` statement. + +Example of component definition with TypeScript: + +``` ts +// we cannot write `import Vue from 'vue'` in TypeScript +// because of the difference of module resolution strategy +// against the other AltJS and module bundlers +import Vue = require('vue') + +Vue.component('my-component', { + template: '
A custom component!
' +}) +``` + +Note that `Vue` is already typed, so all methods, properties and parameters will be type checked. For example, if you typo `template` option, TypeScript compiler will print an error message on a compile time. + +If you want to use Vue's types explicitly, they belong to the `Vue` object. In case you create a component on a separated file (e.g. [single file component](single-file-components.html)), you can annotate a type with the component option object: + +``` ts +import Vue = require('vue') + +export default { + props: ['message'], + template: '{{ message }}' + +// annotate ComponentOptions with `as` operator +} as Vue.ComponentOptions +``` + +You can see all available types on the corresponding repository ([here are Vue's types](https://github.com/vuejs/vue/blob/dev/types/index.d.ts)). + +## vue-class-component and Decorators + +Sometimes it would be verbose to write components with TypeScript. For example, you may need to declare component properties and methods explicitly and annotate the type to component options while it is initialized in `data` hook: + +``` ts +import Vue = require('vue') + +// declare the component type +interface MyComponent extends Vue { + message: string + onClick (): void +} + +export default { + template: '', + data: function () { + // initialize component data + // TypeScript cannot infer the data type + return { + message: 'Hello!' + } + }, + methods: { + onClick: function () { + // `this` is declarated as MyComponent + window.alert(this.message) + } + } + +// annotate MyComponent type explicitly +} as Vue.ComponentOptions +``` + +This is because TypeScript cannot infer the component type from the Vue API. To avoid unnecessary type annotation, we can use [vue-class-component](https://github.com/vuejs/vue-class-component). vue-class-component let us write a component like a native JavaScript class. For example, if we write the above component with vue-class-component: + +``` ts +import Vue = require('vue') +import Component from 'vue-class-component' + +// ECMAScript Decorator syntax +// @Component indicates the class will be +// defined as a Vue component +@Component({ + // all component options are allowed in here + template: '' +}) +export default MyComponent extends Vue { + // initial data can be declared as class instance properties + message: string = 'Hello!' + + // component methods can be declared as class instance methods + onClick (): void { + window.alert(this.message) + } +} +``` + +With vue-class-component, the Vue component's data and methods can be declared by the class syntax. So that TypeScript infers their types without explicit interface declarations. + +If you want to extend the functionallity of vue-class-component for your use cases, you can make additional decorators for class components by using the `createDecorator` helper (See [the README of vue-class-component](https://github.com/vuejs/vue-class-component#create-custom-decorators)). From 890322463dc00f4eda5e08fdbd92418213b432ed Mon Sep 17 00:00:00 2001 From: ktsn Date: Mon, 12 Dec 2016 14:19:20 +0900 Subject: [PATCH 2/7] add introduction of typescript guide --- src/v2/guide/typescript.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/v2/guide/typescript.md b/src/v2/guide/typescript.md index 9367ba0a1d..06d86bd3a9 100644 --- a/src/v2/guide/typescript.md +++ b/src/v2/guide/typescript.md @@ -4,6 +4,8 @@ type: guide order: 25 --- +If you develop a large application, using a language having static type checking would be helpful. If your code seems to cause unexpected behavior, it provides useful errors before you run it on browsers. You can easily use [TypeScript](https://www.typescriptlang.org/) (one of popular AltJS having static type checking) with Vue since Vue officially provides its declaration files. + ## Official Declaration Files There are official declaration files for Vue, vue-router and vuex. You do not have to use external tools like `typings` to use them since they are published via npm. You can install Vue's declarations with `npm install vue`. Then, all declarations can be imported with `import` statement. From e528d7ec603c021d88f3d2a22aaf7e5c4875ef60 Mon Sep 17 00:00:00 2001 From: ktsn Date: Mon, 12 Dec 2016 14:41:59 +0900 Subject: [PATCH 3/7] add a caveat of official declaration files --- src/v2/guide/typescript.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/v2/guide/typescript.md b/src/v2/guide/typescript.md index 06d86bd3a9..d6dec7154a 100644 --- a/src/v2/guide/typescript.md +++ b/src/v2/guide/typescript.md @@ -40,6 +40,8 @@ export default { You can see all available types on the corresponding repository ([here are Vue's types](https://github.com/vuejs/vue/blob/dev/types/index.d.ts)). +

The declaration files of Vue requires `--lib DOM,ES2015` as compiler option. So you need to pass the option via `tsc` command or `tsconfig.json`. For more details of compiler options, please see [Compiler Options · TypeScript](https://www.typescriptlang.org/docs/handbook/compiler-options.html)

+ ## vue-class-component and Decorators Sometimes it would be verbose to write components with TypeScript. For example, you may need to declare component properties and methods explicitly and annotate the type to component options while it is initialized in `data` hook: From cca995088233c0b91d01006d85c864f186c2571d Mon Sep 17 00:00:00 2001 From: ktsn Date: Mon, 12 Dec 2016 20:43:06 +0900 Subject: [PATCH 4/7] improve typescript guide by reviews --- src/v2/guide/typescript.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/v2/guide/typescript.md b/src/v2/guide/typescript.md index d6dec7154a..69f5f095e0 100644 --- a/src/v2/guide/typescript.md +++ b/src/v2/guide/typescript.md @@ -4,7 +4,7 @@ type: guide order: 25 --- -If you develop a large application, using a language having static type checking would be helpful. If your code seems to cause unexpected behavior, it provides useful errors before you run it on browsers. You can easily use [TypeScript](https://www.typescriptlang.org/) (one of popular AltJS having static type checking) with Vue since Vue officially provides its declaration files. +If you develop a large application, using a language having static type checking would be helpful. For example, if you have typos in your code, it provides useful errors before you run it on browsers. You can easily use [TypeScript](https://www.typescriptlang.org/) (one of popular AltJS having static type checking) with Vue since Vue officially provides its declaration files. ## Official Declaration Files @@ -18,12 +18,15 @@ Example of component definition with TypeScript: // against the other AltJS and module bundlers import Vue = require('vue') +// or we can also write like following: +// import * as Vue from 'vue' + Vue.component('my-component', { template: '
A custom component!
' }) ``` -Note that `Vue` is already typed, so all methods, properties and parameters will be type checked. For example, if you typo `template` option, TypeScript compiler will print an error message on a compile time. +Note that `Vue` is already typed, so all methods, properties and parameters will be type checked. For example, if you have a typo in `template` option, TypeScript compiler will print an error message on a compile time. If you want to use Vue's types explicitly, they belong to the `Vue` object. In case you create a component on a separated file (e.g. [single file component](single-file-components.html)), you can annotate a type with the component option object: @@ -40,7 +43,7 @@ export default { You can see all available types on the corresponding repository ([here are Vue's types](https://github.com/vuejs/vue/blob/dev/types/index.d.ts)). -

The declaration files of Vue requires `--lib DOM,ES2015` as compiler option. So you need to pass the option via `tsc` command or `tsconfig.json`. For more details of compiler options, please see [Compiler Options · TypeScript](https://www.typescriptlang.org/docs/handbook/compiler-options.html)

+

The declaration files of Vue requires `--lib DOM,ES2015.Promise` as compiler option. So you need to pass the option via `tsc` command or `tsconfig.json`. For more details of compiler options, please see [Compiler Options · TypeScript](https://www.typescriptlang.org/docs/handbook/compiler-options.html)

## vue-class-component and Decorators @@ -88,7 +91,7 @@ import Component from 'vue-class-component' // all component options are allowed in here template: '' }) -export default MyComponent extends Vue { +export default class MyComponent extends Vue { // initial data can be declared as class instance properties message: string = 'Hello!' From e65e511bf8880a85863ccade841e72f62f8eaf50 Mon Sep 17 00:00:00 2001 From: ktsn Date: Tue, 13 Dec 2016 07:44:54 +0900 Subject: [PATCH 5/7] fix the description of typescript again --- src/v2/guide/typescript.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v2/guide/typescript.md b/src/v2/guide/typescript.md index 69f5f095e0..27b9717034 100644 --- a/src/v2/guide/typescript.md +++ b/src/v2/guide/typescript.md @@ -4,7 +4,7 @@ type: guide order: 25 --- -If you develop a large application, using a language having static type checking would be helpful. For example, if you have typos in your code, it provides useful errors before you run it on browsers. You can easily use [TypeScript](https://www.typescriptlang.org/) (one of popular AltJS having static type checking) with Vue since Vue officially provides its declaration files. +If you develop a large application, using a language having static type checking would be helpful. If you have unexpected mistakes in your code, it provides useful errors before you run it on browsers. You can easily use [TypeScript](https://www.typescriptlang.org/) (one of popular AltJS having static type checking) with Vue since Vue officially provides its declaration files. ## Official Declaration Files From 70bd2ebdb192ab34b4803759188e3aad39192382 Mon Sep 17 00:00:00 2001 From: Chris Fritz Date: Wed, 14 Dec 2016 01:48:43 -0500 Subject: [PATCH 6/7] revise and reorganize typescript doc --- src/images/typescript-type-error.png | Bin 0 -> 67748 bytes src/v2/guide/typescript.md | 71 ++++++++++++--------------- 2 files changed, 31 insertions(+), 40 deletions(-) create mode 100644 src/images/typescript-type-error.png diff --git a/src/images/typescript-type-error.png b/src/images/typescript-type-error.png new file mode 100644 index 0000000000000000000000000000000000000000..750d8a06489f4633cc799d92f3b912b3a90c16eb GIT binary patch literal 67748 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 bus7svX-y>;L}&nG)D@ literal 0 HcmV?d00001 diff --git a/src/v2/guide/typescript.md b/src/v2/guide/typescript.md index 27b9717034..49e3e9bed4 100644 --- a/src/v2/guide/typescript.md +++ b/src/v2/guide/typescript.md @@ -1,34 +1,30 @@ --- -title: TypeScript +title: TypeScript Support type: guide order: 25 --- -If you develop a large application, using a language having static type checking would be helpful. If you have unexpected mistakes in your code, it provides useful errors before you run it on browsers. You can easily use [TypeScript](https://www.typescriptlang.org/) (one of popular AltJS having static type checking) with Vue since Vue officially provides its declaration files. - ## Official Declaration Files -There are official declaration files for Vue, vue-router and vuex. You do not have to use external tools like `typings` to use them since they are published via npm. You can install Vue's declarations with `npm install vue`. Then, all declarations can be imported with `import` statement. +A strong type system can help prevent many potential runtime errors, especially as applications grow. That's why Vue ships with [official type declarations](https://github.com/vuejs/vue/tree/dev/types) for [TypeScript](https://www.typescriptlang.org/) - not only in Vue core, but also [for Vue Router](https://github.com/vuejs/vue-router/tree/dev/types) and [for Vuex](https://github.com/vuejs/vuex/tree/dev/types) as well. -Example of component definition with TypeScript: +Since these are [published on NPM](https://unpkg.com/vue/types/), you don't even need external tools like `Typings`, as declarations are automatically imported with Vue. That means all you need is a simple: ``` ts -// we cannot write `import Vue from 'vue'` in TypeScript -// because of the difference of module resolution strategy -// against the other AltJS and module bundlers import Vue = require('vue') +``` -// or we can also write like following: -// import * as Vue from 'vue' +Then all methods, properties, and parameters will be type checked. For example, if you misspell the `template` component option as `tempate` (missing the `l`), the TypeScript compiler will print an error message at compile time. If you're using an editor that can lint TypeScript, such as [Visual Studio Code](https://code.visualstudio.com/), you'll even be able to catch these errors before compilation: -Vue.component('my-component', { - template: '
A custom component!
' -}) -``` +![TypeScript Type Error in Visual Studio Code](/images/typescript-type-error.png) -Note that `Vue` is already typed, so all methods, properties and parameters will be type checked. For example, if you have a typo in `template` option, TypeScript compiler will print an error message on a compile time. +### Compilation Options -If you want to use Vue's types explicitly, they belong to the `Vue` object. In case you create a component on a separated file (e.g. [single file component](single-file-components.html)), you can annotate a type with the component option object: +Vue's declaration files require the `--lib DOM,ES2015.Promise` [compiler option](https://www.typescriptlang.org/docs/handbook/compiler-options.html). You can pass this option to the `tsc` command or add the equivalent to a `tsconfig.json` file. + +### Accessing Vue's Type Declarations + +If you want to annotate your own code with Vue's types, you can access them on Vue's exported object. For example, to annotate an exported component options object (e.g. in a `.vue` file): ``` ts import Vue = require('vue') @@ -36,23 +32,17 @@ import Vue = require('vue') export default { props: ['message'], template: '{{ message }}' - -// annotate ComponentOptions with `as` operator } as Vue.ComponentOptions ``` -You can see all available types on the corresponding repository ([here are Vue's types](https://github.com/vuejs/vue/blob/dev/types/index.d.ts)). +## Class-Style Vue Components -

The declaration files of Vue requires `--lib DOM,ES2015.Promise` as compiler option. So you need to pass the option via `tsc` command or `tsconfig.json`. For more details of compiler options, please see [Compiler Options · TypeScript](https://www.typescriptlang.org/docs/handbook/compiler-options.html)

- -## vue-class-component and Decorators - -Sometimes it would be verbose to write components with TypeScript. For example, you may need to declare component properties and methods explicitly and annotate the type to component options while it is initialized in `data` hook: +Vue component options can easily be annotated with types: ``` ts import Vue = require('vue') -// declare the component type +// Declare the component's type interface MyComponent extends Vue { message: string onClick (): void @@ -61,47 +51,48 @@ interface MyComponent extends Vue { export default { template: '', data: function () { - // initialize component data - // TypeScript cannot infer the data type return { message: 'Hello!' } }, methods: { onClick: function () { - // `this` is declarated as MyComponent + // TypeScript knows that `this` is of type MyComponent + // and that `this.message` will be a string window.alert(this.message) } } - -// annotate MyComponent type explicitly +// We need to explicitly annotate the exported options object +// with the MyComponent type } as Vue.ComponentOptions ``` -This is because TypeScript cannot infer the component type from the Vue API. To avoid unnecessary type annotation, we can use [vue-class-component](https://github.com/vuejs/vue-class-component). vue-class-component let us write a component like a native JavaScript class. For example, if we write the above component with vue-class-component: +Unfortunately, there are a few limitations here: + +- __TypeScript can't infer all types from Vue's API.__ For example, it doesn't know that the `message` property returned in our `data` function will be added to the `MyComponent` instance. That means if we assigned a number or boolean value to `message`, linters and compilers wouldn't be able to raise an error, complaining that it should be a string. + +- Because of the previous limitation, __annotating types like this can be verbose__. The only reason we have to manually declare `message` as a string is because TypeScript can't infer the type in this case. + +Fortunately, [vue-class-component](https://github.com/vuejs/vue-class-component) can solve both of these problems. It's an official companion library that allows you to declare components as native JavaScript classes, with a `@Component` decorator. As an example, let's rewrite the above component: ``` ts import Vue = require('vue') import Component from 'vue-class-component' -// ECMAScript Decorator syntax -// @Component indicates the class will be -// defined as a Vue component +// The @Component decorator indicates the class is a Vue component @Component({ - // all component options are allowed in here + // All component options are allowed in here template: '' }) export default class MyComponent extends Vue { - // initial data can be declared as class instance properties + // Initial data can be declared as instance properties message: string = 'Hello!' - // component methods can be declared as class instance methods + // Component methods can be declared as instance methods onClick (): void { window.alert(this.message) } } ``` -With vue-class-component, the Vue component's data and methods can be declared by the class syntax. So that TypeScript infers their types without explicit interface declarations. - -If you want to extend the functionallity of vue-class-component for your use cases, you can make additional decorators for class components by using the `createDecorator` helper (See [the README of vue-class-component](https://github.com/vuejs/vue-class-component#create-custom-decorators)). +With this syntax alternative, our component definition is not only shorter, but TypeScript can also infer the types of `message` and `onClick` without explicit interface declarations. This strategy even allows you to handle types for computed properties, lifecycle hooks, and render functions. For full usage details, see [the vue-class-component docs](https://github.com/vuejs/vue-class-component#vue-class-component). From a6dbc08ebda3a26db1f96431aae5ea6b82355df0 Mon Sep 17 00:00:00 2001 From: Chris Fritz Date: Wed, 14 Dec 2016 02:13:40 -0500 Subject: [PATCH 7/7] Update strong to static in typescript guide --- src/v2/guide/typescript.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v2/guide/typescript.md b/src/v2/guide/typescript.md index 49e3e9bed4..5bfaa33c25 100644 --- a/src/v2/guide/typescript.md +++ b/src/v2/guide/typescript.md @@ -6,7 +6,7 @@ order: 25 ## Official Declaration Files -A strong type system can help prevent many potential runtime errors, especially as applications grow. That's why Vue ships with [official type declarations](https://github.com/vuejs/vue/tree/dev/types) for [TypeScript](https://www.typescriptlang.org/) - not only in Vue core, but also [for Vue Router](https://github.com/vuejs/vue-router/tree/dev/types) and [for Vuex](https://github.com/vuejs/vuex/tree/dev/types) as well. +A static type system can help prevent many potential runtime errors, especially as applications grow. That's why Vue ships with [official type declarations](https://github.com/vuejs/vue/tree/dev/types) for [TypeScript](https://www.typescriptlang.org/) - not only in Vue core, but also [for Vue Router](https://github.com/vuejs/vue-router/tree/dev/types) and [for Vuex](https://github.com/vuejs/vuex/tree/dev/types) as well. Since these are [published on NPM](https://unpkg.com/vue/types/), you don't even need external tools like `Typings`, as declarations are automatically imported with Vue. That means all you need is a simple: