microsoft / microsoft/TypeScript
Support multiple properties for JSX.ElementAttributesProperty
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
🔍 Search Terms
"multiple properties", "JSX", "ElementAttributesProperty"
✅ 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
After Vue 3.6, introduce a new Vapor component (Non Virtual DOM) created by defineVaporComponent, it has a props property for JSX.ElementAttributesProperty to detect props.
const VaporComp = defineVaporComponent(() => {
props: { foo: Number },
setup: () => {
return <div />
}
})
const instance = new VaporComp({ foo: 1 })
instance.props
// ^^^^^
And Vue also provide a interop mode, so that Vapor Component and Virtual DOM Component can be used together.
But the Virtual DOM Component created by defineComponent has a $props property for JSX.ElementAttributesProperty to detect props.
const VirtualComp = defineComponent({
props: { foo: Number },
setup: () => {
return () => <div />
}
})
const instance = new VirtualComp({ foo: 1 })
instance.$props
// ^^^^^^
📃 Motivating Example
Support Vapor Component and Virtual DOM co-usage for Vue.
Or React Class Component and Vue Component co-usage.
💻 Use Cases
- What do you want to use this for?
-
Supports define multiple properties for JSX.ElementAttributesProperty, so that
Vapor Component(props) andVirtual DOM Component($props) can used together.declare global { namespace JSX { interface ElementAttributesProperty { $props; props; } } }
- What shortcomings exist with current approaches?
- JSX.ElementAttributesProperty now only support define one property, if defined two perpoties will be expose a error.
- What workarounds are you using in the meantime?
- None
This is implementation details: https://github.com/zhiyuanzmj/TypeScript/commit/fcfbd3e1ea3c777b81ce6efbfb17808baafe29d5
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le comportement de JSX.ElementAttributesProperty de TypeScript et le commit d’implémentation lié, puis suivez la manière dont la recherche actuelle d’une propriété unique est vérifiée. Définissez comment props et $props doivent tous deux être acceptés tout en préservant le comportement JSX existant, et vérifiez que les exemples de composants Vapor et Virtual DOM proposés passent la vérification de types sans l’erreur actuelle.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 25/100