Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork2.8k
Discussion: Consider making a "shortcut" API around TypeScript for node types#6013
-
SuggestionWe write code like this very frequently: constparserServices=util.getParserServices(context);constchecker=parserServices.program.getTypeChecker();consttsNode=parserServices.esTreeNodeToTSNodeMap.get(node);consttype=checker.getTypeAtLocation(node); It's a little burdensome. @bradzacher and I were chatting in a pairing about how it might be convenient to make a wrapper around this, for convenience. Vague first draft: declareconsttypeUtils:{[Kinkeyofts.TypeChecker]:(services:ParserServices,node:TSESTree.Node)=>ReturnType<ts.TypeChecker[K]>;};consttype=typeUtils.getTypeAtLocation(parserServices,node); We'd probably want to export this as a publicly available & documented API, so it's not confusing to consumers why our source code doesn't look like examples. One downside would be that we're obfuscating how to use TypeScript APIs. I hate to add to complexity of understanding these already hard-to-understand things... |
BetaWas this translation helpful?Give feedback.
All reactions
Replies: 3 comments
-
I would say we could probably go one step further and just offer all of this off of the parser serivces! For example: typeParserServices={getTypeAtLocation(node:TSESTree.Node):ReturnType<ts.TypeChecker['getTypeAtLocation']>;};constparserServices=util.getParserServices(context);parserServices.getTypeAtLocation(node); That would make it even more straight-forward for people to use the tooling! |
BetaWas this translation helpful?Give feedback.
All reactions
-
Oh interesting. I like putting this as a member of |
BetaWas this translation helpful?Give feedback.
All reactions
-
the reason I like it as a direct sibling is it's one less step. const{program}=util.getParserServices(context);constchecker=program.getTypeChecker(); Adding it as a separate property would make it more likely there's a clash if the consumer needs a more advanced API than what we offer. const{checker, program}=util.getParserServices(context);constchecker2=program.getTypeChecker(); If we build it right then most usecases shouldn't really need to ever manually touch |
BetaWas this translation helpful?Give feedback.
All reactions
👍 1
This discussion was converted from issue #5937 on November 17, 2022 15:54.