microsoft / microsoft/TypeScript
When using typeof for the interface, it is hoped that the jsdoc comments of the expression can inherit typeof by default
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.4k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 117
Description
🔍 Search Terms
"typeof","jsdoc"
✅ Viability Checklist
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals
⭐ Suggestion
/** JSDoc1 */
const test = { a: 0 }
declare module 'vue' {
interface ComponentCustomProperties {
/** JSDoc2 */
testInInterface: typeof test,
}
}
const test2 = {
/** JSDoc3 */
test
}
I hope that when not writing JSDoc2 or JSDoc3, testInInterface and test2.test can have comments for const test in JSDoc1
📃 Motivating Example
The interface has the feature of declaring and merging, allowing developers to extend the interfaces defined in the component library. In front-end development, extending Vue's global components, directives, and properties is often used.
Taking a Vue component as an example, including its global and local usage schemes, there is currently a lack of JSDoc comments
- global
import vueComponentWithJsDoc from './test.vue'
declare module 'vue' {
interface GlobalComponents {
vueComponentWithoutJsDoc: typeof vueComponentWithJsDoc
}
}
- local
import vueComponentWithJsDoc from './test.vue'
import { defineComponent } from 'vue'
export default defineComponent({
components: { vueComponentWithoutJsDoc: vueComponentWithJsDoc }
})
When using components in the template, both of the above schemes lack JSDoc comments
<template>
<vue-component-without-js-doc />
</template>
💻 Use Cases
- JSDoc comments can be included when declaring a merge interface
- The type obtained by the typeof instance is missing the jsdoc annotation
- Manually copy a jsdoc comment onto the interface field
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the examples using JSDoc1 on test, then compare the missing comments on testInInterface and test2.test. The change is complete when comments from a typeof expression are inherited in both interface and property-access cases without requiring JSDoc2 or JSDoc3.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, typescript
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100