He leído un montón de variaciones diferentes de esta misma pregunta, pero simplemente no puedo entenderlo. Estoy usando el módulo websocket (que he usado muchas veces antes sin TypeScript) y no sé cómo escribir mis variables.
Tengo una función que acepta un objeto WebSocketConnection , pero cuando le doy el tipo WebSocketConnection , aparece "Cannot find name 'WebSocketConnection'" de TypeScript.
Instalé el paquete @types/websocket y puedo ver el archivo index.d.ts con todas las definiciones de tipo ubicadas en ./node_modules/@types/websocket/index.d.ts en relación con mi tsconfig.json expediente...
Intenté agregar la opción "typeRoots" al archivo tsconfig.json , así como también "types" . He probado muchas combinaciones de valores pero, por lo que puedo decir, dejarlos fuera por completo es una mejor apuesta, así que también lo he intentado. También probé muchas variaciones de import de datos tanto del archivo .d.ts como del propio paquete, sin suerte, por supuesto.
Intenté usar /// <reference path="node_modules/@types/websocket/index.d.ts" /> también sin suerte.
Busqué en el archivo .d.ts y encontré una declaración muy clara de una interfaz llamada IStringified que se veía así:
export interface IStringified { toString: (...args: any[]) => string; } Así que traté de acceder a IStringified y sigo recibiendo el mismo error "Cannot find name 'IStringified'" .
Probablemente estoy siendo realmente tonto y me estoy perdiendo algo claramente obvio, ¡pero cualquier sugerencia o consejo sería muy apreciado! ¿Qué demonios estoy haciendo mal?
Los tipos de paquetes instalados no están disponibles globalmente. Deben importarse en cada archivo para poder utilizarlos. No te metas con typeroots o triple slash, eso solo empeorará las cosas.
En este caso particular, el módulo exporta una clase de connection , que es probablemente lo que desea. Su nombre desafortunado significa que para que parezca el constructor de clase que realmente es, probablemente debería cambiar el nombre en la importación:
import { server as WebSocketServer, connection as WebSocketConnection, } from 'websocket'Y ahora puedes hacer:
const wsServer = new WebSocketServer({ httpServer: server }); wsServer.on('request', function(request) { var connection = request.accept('echo-protocol', request.origin); doSomethingWithWsConnection(connection) // works }); function doSomethingWithWsConnection(connection: WebSocketConnection) { //... }Ejemplo de typesafe en el patio de recreo de TS
Así que traté de acceder a IStringified y sigo recibiendo el mismo error "No se puede encontrar el nombre 'ISringified'".
Importa el tipo, luego usa el tipo:
import { IStringified } from 'websocket' const foo: IStringified = { toString: () => 'asdf' }