microsoft / microsoft/TypeScript

[proposal] Non widened string values should be valid enum values, like widened string values

Aperta
#59,346 3 commenti 1 reazione 1 assegnatario Vedi su GitHub

@ahejlsberg ci sta già lavorando.

Dal 26/7/2024.

Suggestion
Lingua principale
Go
Stelle
111k
Fork
14.4k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

🔍 Search Terms

enum, string

✅ Viability Checklist
⭐ Suggestion

TypeScript accepts widened strings as enum values, but refuses to accept non widened strings as enum values. I propose to relax this constraint allowing widened and non widened strings as valid enum values.

📃 Motivating Example

At the moment TypeScript accepts widened strings as valid enum values.

// FILE:./case1.ts
export const Case1_ImagePngType = 'image/png'

// Emitted in FILE:./case1.d.ts as
export declare const Case1_ImagePngType = "image/png"

// FILE:./test1.ts
import {Case1_ImagePngType} from './case1.js'

enum Case1 {
  // WORKS FINE
  Png = Case1_ImagePngType,
}

Trying to use a non widened string results in a compiler error.

// FILE:./case2.ts
export const Case2_ImageJpegType = 'image/jpeg' as const

// Emitted in FILE:./case2.d.ts as
export declare const Case2_ImageJpegType: "image/jpeg"

// FILE:./test2.ts
import {Case2_ImageJpegType} from './case2.js'

enum Case2 {
  // FAILS WITH: Type 'string' is not assignable to type 'number' as required for computed enum member values.
  Jpeg = Case2_ImageJpegType,
}
💻 Use Cases

Given a consumer project P1 using exported widened strings values from a consumed library L1, if L1 annotates the exported strings values as const, L1 breaks P1.

Given that a widened string value is a valid enum value, a "stricter" non widened string (a subset of the widened one) should be a valid enum value too.

// FILE:./lib-1.ts
export const ImagePngType = 'image/png'

// FILE:./lib-2.ts
export const ImageJpegType = 'image/jpeg' as const

// FILE:./project.ts
enum MyEnum {
  Png = ImagePngType, // FINE.
  Jpeg = ImageJpegType, // SHOULD BE FINE, BUT ERROR AT THE MOMENT.
}

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.