[TypeScript] define events interface
Nessuno ha ancora preso questa issue.
- Lingua principale
- TypeScript
- Stelle
- 11.9k
- Fork
- 490
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Hi,
I want to define an events interface like so:
```ts
const events = {
test: (payload) => {
console.log(payload);
},
another: (payload) => {
console.log(payload);
}
} as const;
```
so the event name is dynamic and can be added later on.
I defined the mitt emitter like so:
```ts
type EventName = keyof typeof events;
type Payload = { [key: string]: any };
type Events = { [key in EventName]: Payload };
export const analytics: Emitter = mitt();
```
and now i can call the event function:
```ts
analytics.on("*", (type, payload) => {
const event = events[type];
event?.(payload);
});
```
and this is works as expected:
```ts
analytics.emit("foo", { test: 1 }); // I get error on foo as it is not define in events object
```
However I cannot define an interface for events like so:
```ts
type EventsList = { [key: EventName]: (payload: Payload) => void };
```
so i'll get the events list like so:
```ts
const events: EventsList = {
test: (payload) => {
console.log(payload);
},
another: (payload) => {
console.log(payload);
}
} as const;
```
I get a ts error:

if i define it like this:
```ts
type EventsList = { [key: string]: (payload: Payload) => void };
```
it doesn't enforce the event name.
here is a codesandbox:
https://codesandbox.io/s/aged-microservice-oi72gv?file=/src/index.ts:0-558
I'd appreciate any help, thanks.
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
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
Il punto di ingresso riproducibile menzionato è src/index.ts nel CodeSandbox collegato. Inizia eseguendo il type checker di TypeScript e verificando i tipi di EventsList e mitt mostrati nel report. Il lavoro è concluso quando l’applicazione desiderata dei nomi degli eventi e gli handler definiti dinamicamente hanno un risultato di tipizzazione chiaro e documentato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- tooling
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100