?在使用typeScript的項目中 需要聲明屬性類型 單獨的局部屬性?可以直接在當前文件中聲明 全局屬性需要在項目根目錄下新建.d.ts文件 vite會自動識別.d.ts類型文件
在該文件中使用declare聲明類型有三種寫法
1、在某種類型的文件中聲明
2、聲明window上的屬性類型
3、全局聲明
一、在某種類型文件中聲明
以下代碼是告訴ts 每個.vue文件是合法模塊 默認到處一個vue組件 避免impot導入某個組件時 ts認為當前組件是未定義的模塊(vue3+ts的基石)
// 在某種類型的文件中聲明
declare module '*.vue' {import type { DefineComponent } from 'vue';// 完整寫法const component: DefineComponent<{msg: string; // 定義 props 類型count?: number; // 可選 prop},{}, // 不定義 dataany, // 不限制方法上下文{}, // 不定義 computed{onClick(): void; // 定義 emits 類型}>;//精簡寫法const component: DefineComponent<{},any,{}>export default component;
}
二、聲明window上的屬性
用于當項目中引入的第三方庫或cdn的sdk 屬性會掛載到window上 嚴格明確作用于window對象. 適用于瀏覽器環境
// index.html 通過script引入第三方庫
<script src='xxx'></script>// .d.ts
declare global {interface window{xxx:any}
}//index.vue 使用
window.xxx
三、全局聲明
也會適用于通過script引入第三方庫 顧名思義 任何環境都會聲明(瀏覽器環境、node環境等)沒有那么嚴格?
// .d.ts
// 變量簡易寫法
declare const xxx:any
// 方法完整寫法
declare const xxx: {// options代表傳參 可以不為any類型 具體類型根據情況自己定義new (options:any): {// 回調函數:(參數)=> 返回值fn1:()=>voidfn2:(val:any)=> number}
}// index.vue 直接使用或new一個新對象
const myObj = xxx
const newObj = new xxx()