node.js - advertencia de eslint de typescript en un constructor de cliente de aws (dynamodb), pero no en otro (s3)
Soy bastante nuevo en Typescript, así que tal vez esté pasando por alto algo obvio, pero no puedo usar el SDK de Javascript de AWS v3 sin activar lo que parecen ser advertencias totalmente falsas de @typescript-eslint. Aquí hay un fragmento trivial que reproduce una de las inconsistencias:
import { S3Client } from "@aws-sdk/client-s3";
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
new S3Client({});
new DynamoDBClient({});
La construcción del cliente S3 está bien. Sin advertencias. Sin embargo, la última línea con la construcción del cliente DynamoDB produce ESLint: Construcción insegura de un valor de tipo any.(@typescript-eslint/no-unsafe-call)
Esto es básicamente sacado directamente de sus documentos de "hola dynamodb".
Ambos paquetes están instalados, y los tipos se ven básicamente iguales, aunque podría haber alguna sutileza oculta en los detalles de los tipos de configuración, supongo (ligeramente simplificado para mayor claridad):
export declare class S3Client extends __Client<__HttpHandlerOptions, ServiceInputTypes, ServiceOutputTypes, S3ClientResolvedConfig> {
readonly config: S3ClientResolvedConfig;
constructor(configuration: S3ClientConfig);
}
contra
export declare class DynamoDBClient extends __Client<__HttpHandlerOptions, ServiceInputTypes, ServiceOutputTypes, DynamoDBClientResolvedConfig> {
readonly config: DynamoDBClientResolvedConfig;
constructor(configuration: DynamoDBClientConfig);
}
Se ven básicamente iguales. ¿Cómo puede considerarse que un constructor devuelve un any? Eso es tan raro.
Mi package.json contiene:
"dependencies": {
"@aws-sdk/client-dynamodb": "^3.351.0",
"@aws-sdk/client-s3": "^3.282.0",
...
Respuesta #1
Esto parece ser un problema de caché de compilación/herramientas. Si ejecuto eslint desde la línea de comandos, no obtengo ningún error, pero dentro de WebStorm 2022.3.2, la advertencia de eslint persiste en cada new DynamoDBClient() incluso si borro completamente la línea y la vuelvo a escribir, agrego una segunda copia, cambio los parámetros, pego el código en un archivo nuevo en el mismo proyecto, etc.
Pude eliminar la advertencia espuria haciendo un Archivo > Invalidar cachés... > Solo reiniciar. Quizás un reinicio regular también habría sido suficiente.
El repro (para WebStorm) parece ser referirse a la clase con la herramienta eslint habilitada antes de hacer un npm install del paquete asociado. El error luego se vuelve persistente incluso después de instalar el paquete. No estoy seguro si esto es un problema general con eslint-before-definition (¡asumiría que muchas personas se encontrarían con eso!) o si hay algo en la complejidad del código de AWS que desencadena el problema.
¡Dejo esta pregunta abierta por si alguien más que use WebStorm se encuentra con el mismo problema!
Respuesta #2
No veo este problema usando las siguientes versiones más recientes de ambos paquetes:
{
"dependencies": {
"@aws-sdk/client-dynamodb": "^3.352.0",
"@aws-sdk/client-s3": "^3.352.0",
"@aws-sdk/lib-dynamodb": "^3.272.0"
},
"type": "module"
}
¿Puedes proporcionar un código reproducible que pueda investigar?
