我有一個 nodejs 應用程式,并且正在為它使用 Typescript,并且已經為 Db 的模型實作了類和介面。我也有一個帶有介面的模型用戶類。我只是想發送通知并使用這樣的 Puhser 基本代碼
let pusher = new Pusher({
appId: process.env.PUSHER_APP_ID,
key: process.env.PUSHER_APP_KEY,
secret: process.env.PUSHER_APP_SECRET,
cluster: process.env.PUSHER_APP_CLUSTER
});
pusher.trigger('notifications', 'user_added', user, req.headers['x-socket-id']);
我以為我會很簡單,但它在 appId、key 等所有欄位上都給出了以下錯誤
(屬性)appId:字串| 未定義 型別'字串| undefined' 不能分配給型別 'string'。型別“未定義”不可分配給型別“字串”.ts(2322) index.d.ts(45, 5):預期型別來自屬性“appId”,該屬性在“選項”型別上宣告
我嘗試使用 pusher 變數作為介面,但 pusher 是我嘗試過的第三方系統
let pusher = new Pusher({
const appId: string = process.env.PUSHER_APP_ID,
const key: string = process.env.PUSHER_APP_KEY,
const secret: string = process.env.PUSHER_APP_SECRET,
const cluster: string = process.env.PUSHER_APP_CLUSTER
});
type here
uj5u.com熱心網友回復:
您可以將環境變數轉換為字串。
let pusher = new Pusher({
appId: process.env.PUSHER_APP_ID as string,
key: process.env.PUSHER_APP_KEY as string,
secret: process.env.PUSHER_APP_SECRET as string,
cluster: process.env.PUSHER_APP_CLUSTER as string,
});
uj5u.com熱心網友回復:
因為process.env.PUSHER_APP_ID值是未定義的 console.log(process.env.PUSHER_APP_ID) 檢查值
uj5u.com熱心網友回復:
您從中獲得的回傳型別process.env將是型別yourRequiredType | undefined,因為它可能存在或不存在,這就是 Typescript 試圖告訴您的。
你有兩個選擇:
您可以將物件的屬性定義為所需的型別或未定義;
您可以實作 Typeguard 以保證傳入的型別正確,如下所示:
const stringTypeGuard = (x: unknown): x is string => typeof x === string
在將物件傳遞給資料庫之前,您可以使用它來保證您的屬性是您想要的
uj5u.com熱心網友回復:
Typescript 將不知道在編譯時將在您的環境中定義哪些變數,因此它會假設process.env.{anything}可能會或可能不會定義(即,string|undefined如果您確定它會被定義,那么您可以說:
let pusher = new Pusher({
appId: process.env.PUSHER_APP_ID!,
key: process.env.PUSHER_APP_KEY!,
secret: process.env.PUSHER_APP_SECRET!,
cluster: process.env.PUSHER_APP_CLUSTER!
});
!告訴打字稿你肯定知道在給定點變數不會是null或undefined
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/446817.html
標籤:javascript 节点.js 反应 打字稿 哎呀
上一篇:如何垂直“對齊”HStack
