microsoft / microsoft/TypeScript

Allow tuple labels passed to `satisfies` to participate in type inference

Abierto
#61,415 0 comentarios 4 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Experience Enhancement Help Wanted Suggestion
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
2 d 4 h
PR fusionados (30 d)
132

Descripción

🔍 Search Terms

tuple, tuples, label, labels, tuple labels, satisfies, as const

✅ Viability Checklist
⭐ Suggestion

Hey TypeScript team! First of all, super excited to hear about tsgo.

I've got a feature request for y'all -- the body of this issue was ported from a playground that I created:

https://tsplay.dev/NljeQW

Basically, I often find myself using the satisfies operator to define mutable tuples inline:

const base = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] as const satisfies any[]
//    ^?  const base: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Sometimes when working with tuples of a known length, I use labels, because why not? Free semantics!

But to get the behavior I'm after, I have to add a layer of indirection.

const ex = [0, 0] as const
type Example = never | [x: typeof ex[0], y: typeof ex[1]]
const example: Example = [...ex]
//    ^? const example: [x: 0, y: 0]

This makes the code more confusing to read, which makes the tradeoff basically a wash.

Feature Request

Allow any labels passed to satisfies to participate in type inference, like so:

const point = [0, 0] as const satisfies [x: any, y: any]
// 
//     Desired type:
//     ^? const point: [x: 0, y: 0]
//                      ^     ^

Let me know if you'd like a more complex example, or if there's anything else I can provide.

📃 Motivating Example

Playground:

https://tsplay.dev/NljeQW

💻 Use Cases
  1. What do you want to use this for?

Adding free semantics

  1. What shortcomings exist with current approaches?

Requires a layer of indirection + introduces the possibility of drift

  1. What workarounds are you using in the meantime?

Outlined in the example I shared

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el TypeScript Playground enlazado y reproduce los ejemplos relacionados con satisfies, as const y labeled tuples. El issue no indica archivos fuente ni tests; se considera completado cuando las etiquetas proporcionadas mediante satisfies participan en la inferencia, preservando los tipos de elemento de tupla demostrados.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
compilers
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
38/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.