microsoft / microsoft/TypeScript
Better support for global registration patterns
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.4k
- Merge medio
- 1g 19h
- PR unite (30g)
- 117
Descrizione
Suggestion
It seems likely the compiler logic used for globalThis could be reused to support automated global types for custom elements , which is especially annoying and difficult to deal with in jsx
Use Cases
this is the current dev workflow for creating and using custom elements
The custom element
loading-spinner.ts
class LoadingSpinner extends HTMLElement {
constructor() {
super();
this.innerHTML = `<div class="loading-spinnner">`
}
//omitting code for brevity
}
customElements.define('loading-spinner', LoadingSpinner); //<-- could this be added to a global namespace using similar logic as globalThis ?
the type definition
loading-spinner.d.ts
//this is coupled to a specific JSX namespace's types (preact in this case)
//maybe adding a JSX.CustomElementsNamespace to lib.d.ts could be an option as well?
interface LoadingSpinner extends JSX.HTMLAttributes {}
declare namespace JSX {
interface IntrinsicElements {
'loading-spinner': LoadingSpinner;
}
}
Using the custom component
usage in a jsx component
import h from Reactish
let MyComponent = () => {
return (
<loading-spinner/> //<--so difficult not to get errors here
)
}
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la logica del compilatore utilizzata per globalThis e con il JSX.CustomElementsNamespace proposto in lib.d.ts, quindi confrontali con loading-spinner.ts e loading-spinner.d.ts. Il lavoro è completato quando customElements.define('loading-spinner', LoadingSpinner) può fornire il tipaggio JSX senza la dichiarazione manuale del namespace.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- compilers, frontend
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100