microsoft / microsoft/TypeScript

Narrowed `const` variables are widened in block-scoped closures

Abierto
#61,158 2 comentarios 1 reacción 0 asignados Ver en GitHub
Domain: check: Control Flow Help Wanted Possible Improvement
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
2 d 4 h
PR fusionados (30 d)
132

Descripción

### 🔎 Search Terms

narrowing, cfa, closure,

### 🕗 Version & Regression Information

- This is the behavior in every version I tried, and I reviewed the FAQ for entries about n/a

### ⏯ Playground Link

https://www.typescriptlang.org/play/?noUncheckedIndexedAccess=true&target=99&ts=5.8.0-dev.20250209#code/CYUwxgNghgTiAEYD2A7AzgF3mgXNjMAligOYDcAUBYQGbwAUa8AvK-AOQ1JLsCU8AbwrwRiVJmwBBCIShNm2SqPg0ArijAZCqeACMowevyHLlydFi5I8nbuxaLhogL5VlajVp0luh409MxCxVuGyt7BTRpWTQlFwpXChAADwAHJBgsAWcgA

### 💻 Code

```ts
declare const s: string;

if (s === 'foo') {
function bad() {
const foo: 'foo' = s;
}
}

// in non-strict code bad() might be accessible outside of the narrowed branch,
// so make sure we're strict
export {}
```

### 🙁 Actual behavior

error trying to use the variable as its narrowed value.

### 🙂 Expected behavior

No error. `bad()` is a local function only reachable within the scope in which `s` has been definitely narrowed to `'foo'`.

### Additional Information

Found organically in https://github.com/typescript-eslint/typescript-eslint/pull/10182#discussion_r1948337564 (with a narrowed member access corollary)

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza con la reproducción vinculada de TypeScript Playground y el ejemplo de código que muestra un const estrechado dentro de una función con ámbito de bloque. Sigue cómo se gestiona el estrechamiento del flujo de control para las declaraciones de funciones locales y verifica que el ejemplo ya no informe de ningún error, preservando el comportamiento de strict-mode descrito en el issue.

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

Evaluación

Stack tecnológico
typescript
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.