我已經閱讀了同一個問題的大量不同變體,但我無法理解它。我正在使用websocket模塊(我之前在沒有 TypeScript 的情況下使用過很多次),但我不知道如何輸入我的變數?
我有一個接收WebSocketConnection物件的函式,但是當我給它指定型別時,WebSocketConnection我會"Cannot find name 'WebSocketConnection'"從 TypeScript 中得到一個。
我已經安裝了該@types/websocket軟體包,并且可以看到該index.d.ts檔案中的所有型別定義都位于./node_modules/@types/websocket/index.d.ts相對于我的tsconfig.json檔案...
我已經嘗試將"typeRoots"選項添加到tsconfig.json檔案中,以及"types". 我已經嘗試了多種價值組合,但據我所知,完全放棄它們是更好的選擇,所以我也嘗試過。我還嘗試了import來自.d.ts檔案和包本身的ing 資料的許多變體,當然沒有運氣。
我/// <reference path="node_modules/@types/websocket/index.d.ts" />也嘗試使用但沒有運氣。
我查看了.d.ts檔案,發現了一個非常清晰的介面宣告,IStringified如下所示:
export interface IStringified {
toString: (...args: any[]) => string;
}
所以我嘗試訪問IStringified,但仍然遇到相同的"Cannot find name 'IStringified'"錯誤。
我可能只是真的很笨,遺漏了一些顯而易見的東西,但任何指示或建議將不勝感激!我到底做錯了什么?
uj5u.com熱心網友回復:
已安裝包的型別在全球范圍內不可用。必須將它們匯入到每個檔案中才能使用它們。根本不要亂用typeroots或三重斜線指令,這只會讓事情變得更糟。
在這種特殊情況下,模塊匯出一個connectionclass,這可能是您想要的。不幸的名字意味著讓它看起來是類建構式,你應該在匯入時重命名它:
import {
server as WebSocketServer,
connection as WebSocketConnection,
} from 'websocket'
現在你可以這樣做:
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) {
//...
}
TS 操場上的型別安全示例
因此,我嘗試訪問 IStringified,但仍然遇到相同的“找不到名稱‘IStringified’”錯誤。
您匯入型別,然后使用該型別:
import { IStringified } from 'websocket'
const foo: IStringified = { toString: () => 'asdf' }
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377607.html
標籤:javascript 节点.js 打字稿 进口 包裹
