TypeScript 5.3 ha sido lanzado oficialmente.
Principales cambios
-
Actualizaciones recientes para admitir la propuesta de atributos de importación
- Proporciona soporte estable para tipos de importación
resolution-mode
- Proporcionar soporte para todos los modos de módulo
resolution-mode
-
switch (true)
Estrechamiento -
Limitación de las comparaciones con booleanos
-
super
Verifique el acceso de propiedad a los campos de instancia -
Consejos interactivos sobre incrustaciones para tipos
-
Omita el análisis de JSDoc para optimización
-
fusionar
tsserverlibrary.js
ytypescript.js
Un caso de uso para los atributos de importación es proporcionar al tiempo de ejecución información sobre el formato esperado del módulo.
// We only want this to be interpreted as JSON,
// not a runnable/malicious JavaScript file with a `.json` extension.
import obj from "./something.json" with { type: "json" };
TypeScript no verifica el contenido de estas propiedades porque son específicas del host, por lo que no se verifican y simplemente se dejan al navegador y al tiempo de ejecución para manejarlos (potencialmente con errores).
// TypeScript is fine with this.
// But your browser? Probably not.
import * as foo from "./foo.js" with { type: "fluffy bunny" };
Las llamadas de importación dinámica () también pueden usar el atributo de importación a través del segundo parámetro.
const obj = await import("./something.json", {
with: { type: "json" }
});
El tipo esperado del segundo argumento está ImportCallOptions
definido por un tipo denominado , que de forma predeterminada sólo espera que se llame a una propiedad with
.
Tenga en cuenta que las propiedades de importación evolucionaron a partir de la propuesta anterior para "aserciones de importación", que se implementó en TypeScript 4.5. La diferencia más obvia es el uso de with
palabras clave en lugar de assert
palabras clave. Pero la diferencia menos obvia es que el tiempo de ejecución ahora es libre de usar propiedades para guiar el análisis y la interpretación de las rutas de importación, mientras que las aserciones de importación solo pueden afirmar ciertas características después de cargar el módulo.
Con el tiempo, TypeScript desaprobará la sintaxis de aserción de importación anterior en favor de la sintaxis de propiedad de importación recomendada. El código existente que utiliza afirmar debe migrarse a la palabra clave with. El código nuevo que requiere propiedades importadas solo debe usar with
la palabra clave.
switch (true)
Estrechamiento
TypeScript 5.3 puede realizar una reducción según las condiciones switch (true)
de cada case
cláusula.
function f(x: unknown) {
switch (true) {
case typeof x === "string":
// 'x' is a 'string' here
console.log(x.toUpperCase());
// falls through...
case Array.isArray(x):
// 'x' is a 'string | any[]' here.
console.log(x.length);
// falls through...
default:
// 'x' is 'unknown' here.
// ...
}
}
Consulte el anuncio de lanzamiento para obtener más detalles .