在做vue+typescript開發過程,給window對象添加屬性並賦值,卻發現報錯,如類型“Window & typeof globalThis”上不存在屬性“gspZc”。
原則上,TypeScript 需要開發者做到先聲明后使用。這就導致開發者在調用很多原生接口(瀏覽器、Node.js)或者第三方模塊的時候,因為某些全局變量或者對象的方法並沒有聲明過,導致編譯器的類型檢查失敗。
通常情況下,我們給window對象賦值,只需求window.propoerty = 'xxx',但是在此處編譯器或者檢查器,並不認識window是個什么東東,所以給出了錯誤提示。
我這里我們只需要在某個*.d.ts聲明下即可,declare的意思告訴編譯器我知道Window是啥類型,它會跟全局下的Window類型自動合並,但是在這個文件中任意類型一定不能使用export導出(沒想明白),否則會不好使。
// *.d.ts文件中
declare interface Window {
gspZc: any
}
d.ts大名叫TypeScript Declaration File,存放一些聲明,類似於C/C++的.h頭文件(#include <stdio.h>)
另外,我們也可以直接把window斷言成any繞過去
(window as any).gspZc