-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Recommend return type annotation #1239
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! 👍
src/v2/guide/typescript.md
Outdated
## Annotating Return Type | ||
|
||
Vue's type definition is prone to [circular reference](https://github.com/Microsoft/TypeScript/issues/12846#issuecomment-270296195) of `this`. | ||
Annotating return type is highly recommended to avoid such error. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider
Because of the circular nature of Vue's declaration files, TypeScript may have difficulties inferring the types of certain methods.
For this reason, you may need to annotate the return type on `computed` methods.
return this.greet() + '!' | ||
} | ||
}, | ||
// `createElement` is inferred, but `render` needs return type |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe the reason you're running into this is that it references greeting
. You shouldn't need this if greeting
is annotated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have tried it but sadly render
still needs annotation. (as reported in vuejs/vue#6921).
I guess the reason is that compiler needs to check the call of createElement
to get the return type, and check calling will cause check argument types. In this case, this.greeting
causes cyclic error.
src/v2/guide/typescript.md
Outdated
}) | ||
``` | ||
|
||
If you find type inference or member completion doesn't work, you can try annotating method return type. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you find type inference or member completion isn't working, annotating certain methods may help address these problems.
Using the `--noImplicitAny` option will help find many of these unannotated methods.
src/v2/guide/typescript.md
Outdated
@@ -139,3 +139,38 @@ var vm = new Vue({ | |||
myOption: 'Hello' | |||
}) | |||
``` | |||
|
|||
## Annotating Return Type |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Types
792f21b
to
5130833
Compare
5130833
to
da1a141
Compare
* Recommend return type annotation (vuejs#1239) * Recommend return type annotation * make explanation clear, thank @DanielRosenwasser * translate * update date
Fix vuejs/vue#6921
TS has type inference limitation, we need to recommend users annotate their return type.
circular dependency
might be a hard term. So I added a link to @DanielRosenwasser 's comment.I hope this section can be clear enough for TS beginners.