最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Vue組件中使用 TypeScript的方法

 更新時間:2018年02月28日 11:46:39   作者:羅學(xué)  
typescript不僅可以約束我們的編碼習(xí)慣,還能起到注釋的作用,當(dāng)我們看到一函數(shù)后我們立馬就能知道這個函數(shù)的用法。這篇文章主要介紹了在Vue組件中使用 TypeScript的方法,需要的朋友可以參考下

注意:此文并不是把vue改為全部替換為ts,而是可以在原來的項目中植入ts文件,目前只是實踐階段,向ts轉(zhuǎn)化過程中的過渡。

ts有什么用?

類型檢查、直接編譯到原生js、引入新的語法糖

為什么用ts?

TypeScript的設(shè)計目的應(yīng)該是解決JavaScript的“痛點”:弱類型和沒有命名空間,導(dǎo)致很難模塊化,不適合開發(fā)大型程序。另外它還提供了一些語法糖來幫助大家更方便地實踐面向?qū)ο蟮木幊獭?/p>

typescript不僅可以約束我們的編碼習(xí)慣,還能起到注釋的作用,當(dāng)我們看到一函數(shù)后我們立馬就能知道這個函數(shù)的用法,需要傳什么值,返回值是什么類型一目了然,對大型項目的維護性有很大的提升。也不至于使開發(fā)者搬起石頭砸自己的腳。

Angular: 我們?yōu)槭裁催x擇TypeScript?

  • TypeScript 里優(yōu)秀的工具
  • TypeScript 是 JavaScript 的超集
  • TypeScript 使得抽象清晰可見
  • TypeScript 使代碼更容易閱讀和理解
  • 是的,我知道這看起來并不直觀。讓我用一個例子來說明我的意思。讓我們來看看這個函數(shù)jQuery.ajax()。我們能從它的簽名中得到什么信息?

 

我們唯一能確定的是這個函數(shù)有兩個參數(shù)。我們可以猜測這些類型。也許第一個是字符串,第二個是配置對象。但這只是猜測,我們可能錯了。我們不知道什么選項進入設(shè)置對象(它們的名稱和類型),或者該函數(shù)返回什么。

在不檢查源代碼或文檔的情況下,我們不可能調(diào)用這個函數(shù)。檢查源代碼并不是一個好的選擇——擁有函數(shù)和類的目的,是在不知道如何實現(xiàn)它們的情況下使用它們。換句話說,我們應(yīng)該依賴于他們的接口,而不是他們的實現(xiàn)。我們可以檢查文檔,但這并不是最好的開發(fā)經(jīng)驗——它需要額外的時間,而且文檔經(jīng)常過期。

因此,盡管很容易閱讀jQuery.ajax(url,settings),真正理解如何調(diào)用這個函數(shù),我們需要閱讀它的實現(xiàn)或它的文檔。

以下是一個類型版本:

 

它給了我們更多的信息。

  • 這個函數(shù)的第一個參數(shù)是一個字符串。
  • 設(shè)置參數(shù)是可選的。我們可以看到所有可以傳遞到函數(shù)中的選項,不僅是它們的名稱,還包括它們的類型。
  • 函數(shù)返回一個JQueryXHR對象,我們可以看到它的屬性和函數(shù)。

類型化簽名肯定比未類型化的簽名長,但是:string,:JQueryAjaxSettings和JQueryXHR并不是混亂的。 它們是提高代碼的可理解性的重要文檔。我們可以更深入地理解代碼,而不必深入到實現(xiàn)或讀取文檔中。 我的個人經(jīng)驗是,我可以更快地閱讀類型化代碼,因為類型提供了更多的上下文來理解代碼。

摘自 Angular: 我們?yōu)槭裁催x擇TypeScript?

ts好學(xué)嗎?

TypeScript的一個設(shè)計亮點就是它并沒有拋棄JavaScript的語法另起爐灶,而是做成了JavaScript的超集(這個功勞應(yīng)該記在Anders上),這樣任何合法的JavaScript的語句在TypeScript下都是合法的,也就是說學(xué)習(xí)成本很低,如果你對JavaScript有比較深入的了解,那么其實可以很快的上手TypeScript,因為它的設(shè)計都是針對JavaScript的使用習(xí)慣和慣例。

一些簡單的例子,一看即懂:

基礎(chǔ)類型

 let isDone: boolean = false; // 布爾值
 let decLiteral: number = 6;  // 數(shù)字
 let name: string = "bob"; // 字符串
 let list: number[] = [1, 2, 3]; // 數(shù)組
 ...
 ...

接口

function printLabel(labelledObj: { label: string }) {  console.log(labelledObj.label);
 } let myObj = { size: 10, label: "Size 10 Object" };
 printLabel(myObj);

類型檢查器會查看printLabel的調(diào)用。 printLabel有一個參數(shù),并要求這個對象參數(shù)有一個名為label類型為string的屬性。 需要注意的是,我們傳入的對象參數(shù)實際上會包含很多屬性,但是編譯器只會檢查那些必需的屬性是否存在,并且其類型是否匹配。

當(dāng)然還有一些高級的用法,這里就不做過多的介紹了,了解更多

如何在vue項目中應(yīng)用ts?

1、首先安裝ts

npm install --save-dev typescript npm install --save-dev ts-loader

2、在根目錄建tsconfig.json文件

{
  "compilerOptions": {
   "experimentalDecorators": true,
   "emitDecoratorMetadata": true,
   "lib": ["dom","es2016"],
   "target": "es5"
  },
  "include": ["./src/**/*"] 
}

3、在配置中添加 ts-loader

{
  test: /\.tsx?$/,
  loader: 'ts-loader',  exclude: /node_modules/,   options: {
   appendTsSuffixTo: [/\.vue$/],
  }
 }

4、最后把 .ts 后綴添加上就OK了,在webpack.base.conf.js文件下

 

現(xiàn)在就可以在我們原本的項目中使用ts文件了。

如何實踐?

1、如何在js中引用ts文件?

由于js文件沒有類型檢測,當(dāng)我們把ts文件引入的時候,ts文件會轉(zhuǎn)化成js文件,所以在js文件中引用ts文件的方法類型檢測機制不會生效。也就是說只有在ts文件內(nèi)才會有類型檢測機制。

那么怎么在js文件中使用類型檢測機制呢?小編自己封裝了一套typeCheck的decorator方法,僅供參考!用法如下:

@typeCheck('object','number') deleteItem(item,index) {}

檢測deleteItem方法參數(shù): item為object類型,index為number類型,如果類型不匹配將會拋出異常

部分代碼獻上:

const _check = function (checked,checker) {
    check:  
    for(let i = 0; i < checked.length; i++) {   
    if(/(any)/ig.test(checker[i]))    
      continue check;   
    if(_isPlainObject(checked[i]) && /(object)/ig.test(checker[i]))
      continue check;   
    if(_isRegExp(checked[i]) && /(regexp)/ig.test(checker[i]))
      continue check;   
    if(Array.isArray(checked[i]) && /(array)/ig.test(checker[i]))
      continue check;   
    let type = typeof checked[i];   
    let checkReg = new RegExp(type,'ig')   
    if(!checkReg.test(checker[i])) {    
      console.error(checked[i] + 'is not a ' + checker[i]);    
      return false;
   }
  }  return true;
 } /**
  * @description 檢測類型
  *  1.用于校檢函數(shù)參數(shù)的類型,如果類型錯誤,會打印錯誤并不再執(zhí)行該函數(shù);
  *  2.類型檢測忽略大小寫,如string和String都可以識別為字符串類型;
  *  3.增加any類型,表示任何類型均可檢測通過;
  *  4.可檢測多個類型,如 "number array",兩者均可檢測通過。正則檢測忽略連接符 ;
  */
 export function typeCheck() {  
   const checker = Array.prototype.slice.apply(arguments);  
     return function (target, funcName, descriptor) {   
       let oriFunc = descriptor.value;
       descriptor.value = function () {    
       let checked = Array.prototype.slice.apply(arguments);    
         let result = undefined;    
         if(_check(checked,checker) ){
           result = oriFunc.call(this,...arguments);
    }       return result;
   }
  }
 };

ts的類型檢測配合typeCheck基本上已經(jīng)滿足了我們的需要。

2、如何在ts中引用js文件?

由于js文件中沒有類型檢測,所以ts文件引入js文件時會轉(zhuǎn)化為any類型,當(dāng)然我們也可以在 .d.ts文件中聲明類型。

如 global.d.ts 文件

 

當(dāng)然有的時候我們需要使用一些庫,然而并沒有聲明文件,那么我們在ts文件中引用的時候就會是undefined。這個時候我們應(yīng)該怎么做?

比如我想要在util.ts文件中用 ‘query-string'的時候我們就會這樣引用:

import querystring from 'query-string';

然而當(dāng)你打印querystring 的時候是undefined。如何解決呢?小編的方法也僅供參考

新建module.js文件

import querystring from 'query-string'; export const qs = querystring;

utile.ts 文件

import { qs } from './module.js';

解決了。打印qs不再是undefined,可以正常使用qs庫了哦。

至此本文就將ts在vue中的配置介紹結(jié)束,此文只代表個人看法,考慮到項目的擴展性,所以沒有全部替換成ts,只是嘗試性在vue中引入ts,還有很多需要改進的地方,如果有更好的建議和意見可以聯(lián)系我!

總結(jié)

以上所述是小編給大家介紹的在Vue組件中使用 TypeScript的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • uni-app中使用ECharts配置四種不同的圖表(示例詳解)

    uni-app中使用ECharts配置四種不同的圖表(示例詳解)

    在uni-app中集成ECharts可以為我們的應(yīng)用提供強大的圖表功能,我們詳細(xì)說一下如何在uni-app中使用ECharts,并配置四種不同的圖表,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • 詳解Vue實現(xiàn)直播功能

    詳解Vue實現(xiàn)直播功能

    這篇文章主要介紹了Vue實現(xiàn)直播功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • Vue雙向數(shù)據(jù)綁定(MVVM)的原理

    Vue雙向數(shù)據(jù)綁定(MVVM)的原理

    這篇文章主要介紹了Vue雙向數(shù)據(jù)綁定的原理,幫助大家更好的理解和學(xué)習(xí)vue,感興趣的朋友可以了解下
    2020-10-10
  • vue-resource:jsonp請求百度搜索的接口示例

    vue-resource:jsonp請求百度搜索的接口示例

    今天小編就為大家分享一篇vue-resource:jsonp請求百度搜索的接口示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • npm run serve運行vue項目時報錯:Error: error:0308010C:digital envelope routines::unsupported的解決方法

    npm run serve運行vue項目時報錯:Error: error:0308010C

    這篇文章主要介紹了npm run serve運行vue項目時,出現(xiàn)報錯:Error: error:0308010C:digital envelope routines::unsupported的解決方法,文中有詳細(xì)的解決方法,需要的朋友可以參考下
    2024-04-04
  • 詳解關(guān)于表格合并span-method方法的補充(表格數(shù)據(jù)由后臺動態(tài)返回)

    詳解關(guān)于表格合并span-method方法的補充(表格數(shù)據(jù)由后臺動態(tài)返回)

    這篇文章主要介紹了詳解關(guān)于表格合并span-method方法的補充(表格數(shù)據(jù)由后臺動態(tài)返回) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 深入淺析vue中cross-env的使用

    深入淺析vue中cross-env的使用

    cross-env是跨平臺設(shè)置和使用環(huán)境變量的腳本。這篇文章主要介紹了vue中cross-env的使用,需要的朋友可以參考下
    2019-09-09
  • Vue修改頁面標(biāo)簽的方法示例

    Vue修改頁面標(biāo)簽的方法示例

    vue項目有時候需要根據(jù)頁面需要動態(tài)的去修改頁面標(biāo)題名稱,本文就來介紹一下,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • ssm+vue前后端分離框架整合實現(xiàn)(附源碼)

    ssm+vue前后端分離框架整合實現(xiàn)(附源碼)

    這篇文章主要介紹了ssm+vue前后端分離框架整合實現(xiàn)(附源碼),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Vue3.2.x中的小技巧及注意事項總結(jié)

    Vue3.2.x中的小技巧及注意事項總結(jié)

    Vue是一套用于構(gòu)建用戶界面的漸進式JavaScript框架,是目前最火的前端框架之一,是前端工程師的必備技能,下面這篇文章主要給大家介紹了關(guān)于Vue3.2.x中的小技巧及注意事項的相關(guān)資料,需要的朋友可以參考下
    2022-04-04

最新評論

特克斯县| 山丹县| 益阳市| 广南县| 翁牛特旗| 上饶县| 易门县| 遂川县| 工布江达县| 武川县| 大冶市| 松滋市| 柘荣县| 平江县| 临朐县| 曲松县| 罗源县| 平顶山市| 息烽县| 青河县| 永德县| 蓬安县| 德江县| 南丹县| 上犹县| 双城市| 西城区| 若尔盖县| 江孜县| 新绛县| 错那县| 枣强县| 甘肃省| 宿州市| 绥德县| 广宗县| 德惠市| 徐汇区| 衡水市| 商丘市| 德保县|