microsoft / microsoft/TypeScript
Allow type assertions to consider typed index signatures
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Go
- Estrellas
- 111k
- Forks
- 14.3k
- Merge medio
- 2 d 4 h
- PR fusionados (30 d)
- 132
Descripción
Search Terms
interface, index, signature, typed, assertion, conversion, partial,
Suggestion
Currently type assertions do not seem to respect typed index signatures [key: string]: any; in interfaces or test for compatibility before attempting to convert.
I am proposing that type assertions would be able to convert this situation without error:
interface Test {
a: string;
b?: string;
[key: string]: any;
}
const a = {b: 'b', c: 3 } as Test;
Use Cases
Currently to work around this I need to first create an intermediate variable that is typed as a Partial before making the assertion. I would prefer to just make the assertion.
Examples
This example above will error because {b: 'b', c: 3 } is missing property a
interface Test {
a: string;
b?: string;
[key: string]: any;
}
const a = {b: 'b', c: 3 } as Test;
If I remove c: 3 from the object then there is no error and a is no longer required:
interface Test {
a: string;
b?: string;
[key: string]: any;
}
const a = {b: 'b' } as Test;
Currently to workaround this an intermediate typed value can be used so the subtype is already confirmed before the assertion:
interface Test {
a: string;
b?: string;
[key: string]: any;
}
const test: Partial<Test> = { b: 'b', c: 3 };
const a = test as Test
Checklist
My suggestion meets these guidelines:
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
- This feature would agree with the rest of TypeScript's Design Goals.
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
Reproduce los ejemplos enlazados de Playground, especialmente la aserción que incluye una signatura de índice tipada y una propiedad adicional. Empieza localizando las comprobaciones de compatibilidad de las aserciones de tipos de TypeScript y sus pruebas de regresión; se considerará terminado cuando la aserción propuesta tenga éxito, mientras que las aserciones incompatibles sigan siendo rechazadas.
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
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100