@bem-react/classname: Unclear typing for element-bound class name formatters
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 68/100
- Tipo di issue
- Refactoring
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- typescript
- Ambito
- frontend
Direzione di ricerca
Inizia individuando l’helper cn() e le dichiarazioni del tipo ClassNameFormatter in @bem-react/classname. Confronta le forme di creazione con un argomento e con due stringhe, introduci la tipizzazione distinta associata all’elemento descritta nell’issue e aggiungi o aggiorna i controlli TypeScript in modo che il passaggio di un secondo nome di elemento venga rifiutato, mentre le chiamate ai modifier rimangano valide.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Current behaviour:
The cn() helper can create a formatter in two different ways:
const cnBlock = cn('Block');
const cnBlockElement = cn('Block', 'Element');
Both values are currently typed as ClassNameFormatter, but the second form behaves differently and makes part of the callable API misleading.
/* block formatter*/
const cnBlock = cn('Block');
cnBlock('Element'); // => Block-Element
cnBlock('Element', { mod: true }); // => Block-Element Block-Element_mod
cnBlock({ mod: true }); // => Block Block_mod
/* element formatter*/
const cnBlockElement = cn('Block', 'Element');
cnBlockElement('Element2', { mod: true }); // => Block-Element Block-Element_mod
cnBlockElement({ mod: true }); // => Block-Element Block-Element_mod
Problem: the first argument 'Element2' in this call is accepted by types, but has no effect. This makes the type contract unclear. For an element-bound formatter, passing another element name is meaningless: the element is already fixed when the formatter is created and Block-Element-Element can't exist as well.
Suggestion: the two formatter creation patterns should have different return types:
ClassNameFormatter]= for block formatters created by the one-argument form
ClassNameElementFormatter- for element-bound formatters created by the two strings
cnBlockElement('Element2', { mod: true });
// should be a TypeScript error
Notes:
- Not a runtime bug
- Bump will be safe since first argument was doing nothing
- I am ready to fix that
- Lingua principale
- TypeScript
- Stelle
- 450
- Fork
- 69
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi 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.
Altre issue di bem/bem-react
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
-
@bem-react/classname: Can't add modifier with value === 0Forse già presa @frontstall l’ha presa 936 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 55/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 52/100
-
@bem-react/pack: support relative importsForse di nuovo libera @yarastqt l’ha presa 2104 giorni fa e non c’è nessuna pull request aperta. Apertabug scope: pack
-
@bem-react/pack: Impl plugin for prepare package.jsonForse di nuovo libera @yarastqt l’ha presa 2122 giorni fa e non c’è nessuna pull request aperta. Apertaimprovement scope: pack
Tutte le issue di bem/bem-react
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
AvaProtocol/ava-sdk-js#276 ·
I maintainer di solito rispondono entro 1 giorno
-
useFragment does not require `variables` when the fragment's variables type has required fieldsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
apollographql/apollo-client#13493 ·
I maintainer di solito rispondono entro 1 giorno
-
Custom hosts written as trailing-dot FQDNs (`host.local.`) aren't detected as local backendsForse già presa @roboomp l’ha presa oggi. Apertabug prio:p2 providers triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
can1357/oh-my-pi#15798 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
code-yeongyu/oh-my-openagent#10172 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
PDFCraftTool/pdfcraft#189 ·