microsoft / microsoft/TypeScript
Spurious "referenced directly or indirectly in its own initializer" when combined with narrowing, asserts function, and loop
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 117
Descripción
Bug Report
🔎 Search Terms
referenced directly or indirectly asserts
🕗 Version & Regression Information
- This is the behavior in every version I tried
⏯ Playground Link
💻 Code
declare const myRequire: ((p: string) => {} | undefined) | undefined;
declare function assertIsDefined<T>(value: T): asserts value is NonNullable<T>
function fn1() {
if (!myRequire) {
return;
}
for (const p of ["a", "b"]) {
// Error?
const result = myRequire("something");
assertIsDefined(result);
}
}
🙁 Actual behavior
result is claimed to be referenced directly or indirectly in its initializer.
Modifying the code in various ways makes the error go away.
🙂 Expected behavior
No error; there's no relationship between the initializer and the result.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el TypeScript Playground enlazado y ejecuta el ejemplo de código proporcionado para reproducir el diagnóstico. Investiga cómo el compilador gestiona el narrowing, las asserts functions y el bucle alrededor del initializer. Se considerará completado cuando el ejemplo deje de indicar que result se referencia en su propio initializer, mientras el comportamiento de narrowing esperado siga intacto.
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
- Bien especificado
- Aptitud para principiantes
- 35/100