Skip to content

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

Merged
merged 2 commits into from
Oct 28, 2017
Merged

Conversation

HerringtonDarkholme
Copy link
Member

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.

Copy link
Member

@ktsn ktsn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! 👍

## 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.

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

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.

Copy link
Member Author

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.

})
```

If you find type inference or member completion doesn't work, you can try annotating method return type.

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.

@@ -139,3 +139,38 @@ var vm = new Vue({
myOption: 'Hello'
})
```

## Annotating Return Type

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Types

@yyx990803 yyx990803 merged commit 6cdc99b into vuejs:master Oct 28, 2017
kazupon pushed a commit to kazupon/vuejs.org that referenced this pull request Nov 24, 2017
* Recommend return type annotation (vuejs#1239)

* Recommend return type annotation

* make explanation clear, thank @DanielRosenwasser

* translate

* update date
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants