不用typsescript如何使用類型增強功能
前言
由於 JS 的弱類型、寬松的編寫規范、以及開發工具的弱雞支持,我們在維護前人的代碼時,經常會出現不知道某一個方法或字段命名來自於哪裡,一定要在全局搜索以後慢慢篩查才能找到
同樣我們在使用接口返回的對象字段時,也不知其類型幾何,意思幾何
甚至在我們使用掛載到 vue 全局對象上的方法時,純粹靠猜,尤其是當函數可以接收多種類型的時候,很痛苦
先說目的:我們希望一切資源皆可索引到其定義或來源,可以有代碼補全,在vscode內ctr+鼠標左鍵皆可導航到,提高效率,用的爽
具體配置信息
配置全局jsconfig.json
我們習慣在wepback內配置相關路徑別名,為瞭讓vscode識別,我們需要做如下配置
{ "compilerOptions": { "target": "ES6", "module": "commonjs", "allowSyntheticDefaultImports": true, "baseUrl": "./", "paths": { "@/*": ["src/*"] } }, "exclude": ["node_modules", "dist"], "include": ["src/**/*", "global.d.ts"] }
安裝插件vue-helper
安裝該插件是為瞭解決vscode-intelligence不識別.vue文件,進而無法導航的問題
不過依然存在bug,如果import x變量名不和file-name相同,則無法識別。
終極解決方案是對 .vue文件進行js托管
export { default } from './index.vue'
vscode可以一步完美導航到具體頁面
討厭寫重復代碼?定義個 snippet
"export default": { "scope": "javascript,typescript", "prefix": "expd", "body": ["export {default} from './index.vue${1}';"] }, "export default as": { "scope": "javascript,typescript", "prefix": "expdas", "body": ["export {default as ${2}} from './index.vue${1}';"] },
為掛在到Vue上的方法或屬性添加類型聲明
根目錄下新建global.d.ts, 並添加至jsconfig.json: include
// global.d.ts import Vue from 'vue' type FnVoid = (...ags: any[]) => void declare module '*.vue' { export default Vue } declare module 'vue/types/vue' { interface Vue { $$title: (title: string) => void $$login: FnVoid // ...... } }
寫正確的註釋
vscode現今對 jsdoc語法的支持愈發完善,在代碼編寫代碼階段可以給我們強大的代碼提示、代碼補全以及代碼檢查
比如我們可以在註釋內定義變量,針對列表返回的接口,且不需要定義 model 對象來承接數據的話,自定義變量就很有用瞭
甚至於還支持import語法
不過,不依附於方法之上的註釋變量是不可用的
比如我新建一個文件,並寫入以下註釋
/** * @typedef {Object} person * @property {string} name * @property {number} age */
在代碼內是無法引用的
/**@type import('./test').person */
我覺得都已經到瞭抽象對象多處復用的地步瞭,為什麼不直接在model層下新建對象呢
估計vscode也是基於此考慮的
另外對象如果是通過計算得來的,vscode 代碼提示功能也無法識別
如下代碼是不能針對對象屬性進行提示的
我們在編寫代碼中盡量避免這種寫法
const func = () => { return ['a', 'b', 'c'].reduce((pre, cur) => { pre[cur] = 'hello ' + cur return pre }, {}) } let obj = func()
Advanced
如果我們想在代碼中對事件定義添加提示怎麼辦呢?
比如我註冊瞭一個事件
test.on('handleInputClicked', () => {})
很遺憾,目前在jsdoc上還做不到
可喜的是,在最新發佈的ts4.1.beta上增加瞭對類型模板字符串的支持
基於此,我們甚至可以實現對 vuex 的支持
具體的文檔參見TypeScript 4.1 類型模板字符串實現 Vuex 的 store.commit 和 store.dispatch 類型判斷
By小雲菜:http://www.cnblogs.com/phillyx/
github:http://github.com/phillyx
總結
到此這篇關於不用typsescript如何使用類型增強功能的文章就介紹到這瞭,更多相關typsescript類型增強功能內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- TypeScript聲明文件的語法與場景詳解
- 如何在Vue項目中應用TypeScript類
- 關於Vue新搭檔TypeScript快速入門實踐
- vue項目中 jsconfig.json概念及使用步驟
- vite的搭建與使用的詳細步驟