Vue CLI 3 可以使用 TypeScript 生成新工程

TypeScript 支持

在 Vue 2.5.0 中,我們大大改進了類型聲明以更好地使用默認的基于對象的 API。同時此版本也引入了一些其它變化,需要開發者作出相應的升級。閱讀博客文章了解更多詳情。

發布為 NPM 包的官方聲明文件

靜態類型系統能幫助你有效防止許多潛在的運行時錯誤,而且隨著你的應用日漸豐滿會更加顯著。這就是為什么 Vue 不僅僅為 Vue core 提供了針對?TypeScript?的官方類型聲明,還為?Vue Router?和?Vuex?也提供了相應的聲明文件。

而且,我們已經把它們發布到了 NPM,最新版本的 TypeScript 也知道該如何自己從 NPM 包里解析類型聲明。這意味著只要你成功地通過 NPM 安裝了,就不再需要任何額外的工具輔助,即可在 Vue 中使用 TypeScript 了。

推薦配置

// tsconfig.json
{
"compilerOptions": {
// 與 Vue 的瀏覽器支持保持一致
"target": "es5",
? ?// 這可以對 `this` 上的數據屬性進行更嚴格的推斷
"strict": true,
? ?// 如果使用 webpack 2+ 或 rollup,可以利用 tree-shake:
"module": "es2015",
"moduleResolution": "node"
}
}

注意你需要引入?strict: true?(或者至少?noImplicitThis: true,這是?strict?模式的一部分) 以利用組件方法中?this?的類型檢查,否則它會始終被看作?any?類型。

參閱?TypeScript 編譯器選項文檔 (英)?了解更多。

開發工具鏈

工程創建

Vue CLI 3?可以使用 TypeScript 生成新工程。創建方式:

# 1. 如果沒有安裝 Vue CLI 就先安裝
npm install --global @vue/cli

# 2. 創建一個新工程,并選擇 "Manually select features (手動選擇特性)" 選項
vue create my-project-name

編輯器支持

要使用 TypeScript 開發 Vue 應用程序,我們強烈建議您使用?Visual Studio Code,它為 TypeScript 提供了極好的“開箱即用”支持。如果你正在使用單文件組件?(SFC), 可以安裝提供 SFC 支持以及其他更多實用功能的?Vetur 插件。

WebStorm?同樣為 TypeScript 和 Vue 提供了“開箱即用”的支持。

基本用法

要讓 TypeScript 正確推斷 Vue 組件選項中的類型,您需要使用?Vue.component?或?Vue.extend?定義組件:

import Vue from 'vue'
const Component = Vue.extend({
// 類型推斷已啟用
})

const Component = {
// 這里不會有類型推斷,
// 因為TypeScript不能確認這是Vue組件的選項
}

基于類的 Vue 組件

如果您在聲明組件時更喜歡基于類的 API,則可以使用官方維護的?vue-class-component?裝飾器:

import Vue from 'vue'
import Component from 'vue-class-component'

// @Component 修飾符注明了此類為一個 Vue 組件
@Component({
// 所有的組件選項都可以放在這里
template: '<button @click="onClick">Click!</button>'
})
export default class MyComponent extends Vue {
// 初始數據可以直接聲明為實例的屬性
message: string = 'Hello!'

// 組件方法也可以直接聲明為實例的方法
onClick (): void {
window.alert(this.message)
}
}

增強類型以配合插件使用

插件可以增加 Vue 的全局/實例屬性和組件選項。在這些情況下,在 TypeScript 中制作插件需要類型聲明。慶幸的是,TypeScript 有一個特性來補充現有的類型,叫做模塊補充 (module augmentation)。

例如,聲明一個?string?類型的實例屬性?$myProperty

// 1. 確保在聲明補充的類型之前導入 'vue'
import Vue from 'vue'

// 2. 定制一個文件,設置你想要補充的類型
// 在 types/vue.d.ts 里 Vue 有構造函數類型
declare module 'vue/types/vue' {
// 3. 聲明為 Vue 補充的東西
interface Vue {
$myProperty: string
}
}

在你的項目中包含了上述作為聲明文件的代碼之后 (像?my-property.d.ts),你就可以在 Vue 實例上使用?$myProperty?了。

var vm = new Vue()
console.log(vm.$myProperty) // 將會順利編譯通過

你也可以聲明額外的屬性和組件選項:

import Vue from 'vue'

declare module 'vue/types/vue' {
?// 可以使用 `VueConstructor` 接口
?// 來聲明全局屬性
interface VueConstructor {
? ?$myGlobal: string
?}
}

// ComponentOptions 聲明于 types/options.d.ts 之中
declare module 'vue/types/options' {
interface ComponentOptions<V extends Vue> {
myOption?: string
}
}

上述的聲明允許下面的代碼順利編譯通過:

// 全局屬性
console.log(Vue.$myGlobal)

// 額外的組件選項
var vm = new Vue({
myOption: 'Hello'
})

標注返回值

因為 Vue 的聲明文件天生就具有循環性,TypeScript 可能在推斷某個方法的類型的時候存在困難。因此,你可能需要在?render?或?computed?里的方法上標注返回值。

import Vue, { VNode } from 'vue'

const Component = Vue.extend({
data () {
return {
msg: 'Hello'
}
},
methods: {
// 需要標注有 `this` 參與運算的返回值類型
greet (): string {
return this.msg + ' world'
}
},
computed: {
// 需要標注
greeting(): string {
return this.greet() + '!'
}
},
// `createElement` 是可推導的,但是 `render` 需要返回值類型
render (createElement): VNode {
return createElement('div', this.greeting)
}
})

如果你發現類型推導或成員補齊不工作了,標注某個方法也許可以幫助你解決這個問題。使用?--noImplicitAny?選項將會幫助你找到這些未標注的方法。

?

?

原文鏈接:https://cn.vuejs.org/v2/guide/typescript.html#工程創建

轉載于:https://www.cnblogs.com/hasubasora/p/9627908.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537877.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537877.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537877.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手機端本地圖片或者拍照的上傳功能

原文連接 https://blog.csdn.net/m0_37852904/article/details/78550136 ---------------------------------------------------------- 最近剛好在做手機端的圖片上傳功能&#xff0c;便記錄下 html&#xff1a; <input type"file" class"hide" i…

php scandir sftp,CentOS 下使用SFTP實現網站自動生成FTP賬號,實現Chroot功能

背景 手上有一個這樣的系統&#xff1a;后臺可以直接新建項目(網站)&#xff0c;只需輸入項目名稱、訪問域名(二級)以及其他一些額外信息&#xff0c;就可自動生成一個模板網站。大致原理是&#xff1a;提交這些信息的時候&#xff0c;后臺會給項目新建一個目錄&#xff0c;并把…

IOS內購詳解

介紹 最近開發的一款APP上架被駁回了&#xff0c;理由是&#xff1a; 上架的APP是培訓類&#xff0c;里面金牌視頻課程需要購買&#xff0c;Android端使用支付寶&#xff0c;微信支付。 蘋果規定 數字化內容、App功能以及服務等&#xff0c;需要使用內購 真實世界中的服務(…

匯編中的函數調用與遞歸

棧幀的結構 倘若我們要想搞清楚過程的實現&#xff0c;就必須先知道棧幀的結構是如何構成的。棧幀其實可以認為是程序棧的一段&#xff0c;而程序棧又是存儲器的一段&#xff0c;因此棧幀說到底還是存儲器的一段。那么既然是一段&#xff0c;肯定有兩個端點&#xff0c;這個不需…

php 相親 段子,精彩的男女幽默段子

精彩的男女幽默段子。撒嬌老婆洗完澡對老公撒嬌說&#xff1a;老公&#xff0c;抱我到床上去吧。老公看了看老婆&#xff0c;冷冷的回答道&#xff1a;我還是把床搬過來吧&#xff01;所以&#xff0c;撒嬌還是要看體型&#xff01;單身老公說&#xff1a;老婆&#xff0c;你不…

Redmine數據庫備份及搬家

Bitnami Redmine的備份分2種方式&#xff1a; 1.導出數據庫 2.整個目錄搬家 不管是哪種都想停掉服務&#xff0c;redmine相關的服務有以下5個&#xff1a; redmineApache   redmineMySQL   redmineSubversion   redmineThin1   redmineThin2 可以打開windows服務控制面…

且看BCH開啟的“信用本位”時代

??? 且看BCH開啟的“信用本位”時代 比特幣向來被稱為“金本位”的互聯網實驗&#xff0c;由于中本聰先生的天才發明&#xff0c;POW機制給予了比特幣與黃金同樣的生產模式。所以&#xff0c;時至今日&#xff0c;BCE依然自稱為“數字黃金”。 只可惜&#xff0c;“一葉障目…

oracle設置臨時表空間,Oracle臨時表空間查看、添加臨時表空間數據文件、修改默認臨時表空間 方法!...

--查表空間使用率情況(含臨時表空間)SELECT d.tablespace_name "Name", d.status "Status",TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), 99,999,990.90) "Size (M)",TO_CHAR (NVL (a.BYTES - NVL (f.BYTES, 0), 0) / 1024 / 1024,99999999.99) US…

Redmine項目管理工具安裝

Redmine免費開源的項目管理工具 下載 一鍵安裝工具 https://bitnami.com/stack/redmine/installer 安裝 Redmine一鍵安裝工具集成了php服務&#xff0c;mysql服務。盡管安裝就好。 安裝完成后&#xff0c;在開始菜單&#xff0c;找到-----Bitnami Redmine Stack--------Bi…

Oracle創建假脫機文件,oracle – 在sqlplus中假脫機csv文件時的標頭格式

我需要使用sqlplus從Oracle中的表中調整csv.以下是所需的格式&#xff1a;"HOST_SITE_TX_ID","SITE_ID","SITETX_TX_ID","SITETX_HELP_ID""664436565","16","2195301","0""664700792&qu…

方便微信公眾號等手機網頁調試插件eruda和vConsole

原文地址&#xff1a;https://blog.csdn.net/qq_39234840/article/details/80951710 ---------------------------------------------------------- 調試插件一&#xff1a;eruda&#xff08;推薦&#xff0c;因為比vConsole功能多&#xff09; <script src"//cdn.js…

HDU 3530Subsequence(單調隊列)

題意 題目鏈接 給出$n$個數&#xff0c;找出最長的區間&#xff0c;使得區間中最大數$-$最小數 $> m$ 且$< k$ Sol 考慮維護兩個單調隊列。 一個維護$1 - i$的最大值&#xff0c;一個維護$1 - i$的最小值。 至于兩個限制條件。 $<k$可以通過調整隊首來滿足 $>a$可以…

oracle權限培訓,Java培訓-ORACLE數據庫學習【2】用戶權限

查詢用戶擁有的權限&#xff1a;1.查看所有用戶&#xff1a;select *from dba_users;select *from all_users;select *from user_users; 2.查看用戶或角色系統權限(直接賦值給用戶或角色的系統權限)&#xff1a;select *from dba_sys_privs;select *from user_sys_privs; 3.查看…

linux 中文件夾的文件按照時間倒序或者升序排列

1&#xff0c;按照時間升序 命令:ls -lrt 詳細解釋: -l use a long listing format 以長列表方式顯示&#xff08;詳細信息方式&#xff09; -t sort by modification time 按修改時間排序&#xff08;最新的在最前面&#xff09; -r reverse order while sorti…

PHP中關于時間(戳)、時區、本地時間、UTC時間等的梳理

PHP中關于時間&#xff08;戳&#xff09;、時區、本地時間、UTC時間等的梳理 在PHP開發中&#xff0c;我們經常會在時間問題上被搞糊涂&#xff0c;比如我們希望顯示一個北京時間&#xff0c;但是當我們使用date函數進行輸出時&#xff0c;卻發現少了8個小時。幾乎所有的php猿…

WebServiceStudio.exe測試webservice接口工具

WebServiceStudio.exe測試webservice接口工具 下載鏈接 https://pan.baidu.com/s/1gf8ajS3 打開工具WebServiceStudio&#xff0c;如下填寫地址&#xff0c;點擊【Get】按鈕 會顯示出需要傳參的地方&#xff0c;在value中填寫xml參數 輸入完value值后&#xff0c;點擊【Invok…

oracle最大實例數,【ORA-16196】一個實例在其生命周期里最多只能裝載和打開一個數據庫...

如果使用“alter database open;”命令打開一個曾經被“alter database close;”命令關閉的數據庫時&#xff0c;您將會收到如下的報錯信息&#xff1a;"ORA-16196: database has been previously opened and closed"這個報錯的原因是什么呢&#xff1f;原因是&#…

Navicat工具導出Mysql數據表結構到Excel文件中

原文鏈接&#xff1a;https://blog.csdn.net/zt15732625878/article/details/77978266 ------------------------------------------------------------------------ 前言 項目中數據庫設計已經完成&#xff0c;現在到了代碼實現的階段&#xff0c;數據庫中沒有數據&#xff…

利用MAVEN的profile 實現打包環境的切換

樂哉碼農產生問題的背景 由于在項目開發的時候&#xff0c;我們一般都是使用的本地庫&#xff0c;數據庫連接寫的是本地的&#xff0c;如果我們將項目打成war的時候&#xff0c;里面的配置連接寫的是我們本地的&#xff0c;當我們直接把war拷貝到服務器上面進行部署的時候&…

服務器oracle優化,oracle服務器配置及優化

1.在ORACLE中實現分布式快速存取和充實內存是很重要的。要不惜任何代價避免頁面調度和交換﹐每次都必須把系統全局區(SGA)放到內存。將SGA放到內存中﹐在INIT.ORA中設置參數 PRE_PAGE_SGAPRE_PAGE_SGAYES2.回卷段的竟爭會降低系統的性能。SELECT GETS,WAITS from V$ROLLSTAT;…