vue3+typescript實(shí)戰(zhàn)記錄一

本文記錄一些vue3+ts+less開發(fā)過(guò)程中的一些小問(wèn)題熙掺。
不斷開發(fā)、不斷更新...

1. 引用.vue文件報(bào)錯(cuò)(vue3必須使用.vue后綴跛璧?暫時(shí)沒(méi)找到解決方案)

問(wèn)題

新建Hello.vue文件,App.vue文件引入Hello.vue,報(bào)錯(cuò)如下:
沒(méi)有發(fā)現(xiàn)模塊components/Hello或者它對(duì)應(yīng)的類型申明

image.png

解決方案(vue2的解決方案)

參考鏈接:https://stackoverflow.com/questions/64213461/vuejs-typescript-cannot-find-module-components-navigation-or-its-correspon

2. .vue文件export導(dǎo)出

要讓 TypeScript正確推斷 Vue 組件選項(xiàng)中的類型趋厉,需要使用 defineComponent 全局方法定義組件。
參考文檔

import {defineComponent} from 'vue';
export default defineComponent({
// 開啟類型推斷
});

3. 引入第三方庫(kù)

引用第三方庫(kù)時(shí)胶坠,如果第三方類庫(kù)并沒(méi)有ts.d.ts類型的聲明文件君账,則無(wú)法在項(xiàng)目中正常使用。如果要順利使用這些庫(kù)沈善, 就需要我們添加聲明文件乡数。

通過(guò)此地址可以查找當(dāng)前安裝的庫(kù)有沒(méi)有.d.ts的聲明文件。

項(xiàng)目中引入echarts

npm install echarts --save
import * as echarts from 'echarts';
echarts.init(dom); // 正常使用

ts聲明查找地址發(fā)現(xiàn)echarts已經(jīng)包含.d.ts類型的聲明文件矮瘟,則不需要我們手動(dòng)去聲明echarts模塊

image.png

4. 定義對(duì)象類型變量

看了基礎(chǔ)類型模塊瞳脓,想當(dāng)然以為定義對(duì)象類型為下面示例:

let option: object = {
     title: {
         text: 'ECharts 入門示例'
     },
     legend: {
        data: ['銷量']
     },
     xAxis: {
        data: ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"]
     },
     yAxis: {},
     series: [{
         name: '銷量',
         type: 'bar',
         data: [5, 20, 36, 10, 10, 20]
     }]
};

報(bào)錯(cuò)如下:
提示不能使用object作為類型。推薦考慮使用Record<string, unknown>代替澈侠。

image.png

解決方案

1. 使用Record<string, any>(檢查不夠嚴(yán)格)

參考文檔

let option: Record<string, any> = {
    ....
}

2. 使用interface接口定義類型(每一個(gè)屬性檢查嚴(yán)格)

參考文檔

// 定義echarts options接口interface
interface echartsOptions {
    // 非必須屬性劫侧,key為string,value為any類型
    title?: Record<string, any>;
    legend?: Record<string, any>;
    // 非必須屬性哨啃,值為string類型組成的數(shù)組
    color?: string[];
    xAxis: Record<string, any>;
    yAxis: Record<string, any>;
    series: Record<string, any>;
    // 接收指定屬性之外的額外屬性烧栋,不會(huì)報(bào)bug
    [propName: string]: any
}
let option: echartsOptions = {
    ....
}

5. ref或document獲取dom元素

<template>
    <div id="main" ref="echarts1" style="width: 600px;height:400px;"></div>
    <div id="main2" ref="echarts2" style="width: 600px;height:400px;"></div>
</template>

解決方案

(1)通過(guò)document獲取dom元素

通過(guò)as HTMLElement進(jìn)行類型轉(zhuǎn)換

let myChart = echarts.init(document.getElementById('main') as HTMLElement);

(2)setup中通過(guò)ref獲取dom元素

setup中定義的變量和方法,都必須通過(guò)return {}暴露出去拳球,外界才能使用审姓,ref函數(shù)僅能監(jiān)聽基本類型的變化,不能監(jiān)聽復(fù)雜類型的變化(比如對(duì)象祝峻、數(shù)組)
setup里獲取ref綁定的dom魔吐,需要在setupreturnref(null)的屬性,模板上ref用對(duì)應(yīng)屬性名

import {ref} from 'vue';
setup() {
    // <>類型聲明
    const echarts1 = ref<HTMLElement|null>(null);
    const echarts2 = ref<HTMLElement|null>(null);
    let myChart = echarts.init(echarts1.value as HTMLElement);
    return {
        echarts1,
        echarts2
    };
}

(3)mounted中通過(guò)$refs獲取dom元素

通過(guò)this.$refs去獲取

mounted() {
    let myChart = echarts.init(this.$refs.echarts2 as HTMLElement);
}

6. 獲取掛載在window對(duì)象上的屬性a報(bào)錯(cuò)

image.png

解決方案

(1)使用類型斷言

缺點(diǎn):在 any 類型的變量上莱找,訪問(wèn)任何屬性都是允許的酬姆。它極有可能掩蓋了真正的類型錯(cuò)誤,所以如果不是非常確定奥溺,就不要使用 as any辞色。

(window as any).a = 1;

(2)類型申明

src根目錄*.d.ts文件中進(jìn)行類型申明

interface Window {
    a: any;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浮定,隨后出現(xiàn)的幾起案子相满,更是在濱河造成了極大的恐慌层亿,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件立美,死亡現(xiàn)場(chǎng)離奇詭異匿又,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)悯辙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門琳省,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人躲撰,你說(shuō)我怎么就攤上這事针贬。” “怎么了拢蛋?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵桦他,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谆棱,道長(zhǎng)快压,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任垃瞧,我火速辦了婚禮蔫劣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘个从。我一直安慰自己脉幢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布嗦锐。 她就那樣靜靜地躺著嫌松,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奕污。 梳的紋絲不亂的頭發(fā)上萎羔,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音碳默,去河邊找鬼贾陷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嘱根,可吹牛的內(nèi)容都是我干的昵宇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼儿子,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了砸喻?” 一聲冷哼從身側(cè)響起柔逼,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蒋譬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后愉适,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犯助,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年维咸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剂买。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡癌蓖,死狀恐怖瞬哼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情租副,我是刑警寧澤坐慰,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站用僧,受9級(jí)特大地震影響结胀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜责循,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一糟港、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧院仿,春花似錦秸抚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至县钥,卻和暖如春秀姐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背若贮。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工省有, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谴麦。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓蠢沿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親匾效。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舷蟀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容