<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
宣告檔案是以.d.ts為字尾的檔案,開發者在宣告檔案中編寫型別宣告,TypeScript根據宣告檔案的內容進行型別檢查。(注意同目錄下最好不要有同名的.ts檔案和.d.ts,例如lib.ts和lib.d.ts,否則模組系統無法只根據檔名載入模組)
為什麼需要宣告檔案呢?我們知道TypeScript根據型別宣告進行型別檢查,但有些情況可能沒有型別宣告:
參考連結(英文):vuejs.org/guide/types…
參考連結(中文):staging-cn.vuejs.org/guide/types…
vue3配合ts中,還需要額外安裝一個 vscode 外掛:Typescript Vue Plugin
目標:掌握defineProps如何配合ts使用
// 執行時宣告 defineProps({ money: { type: Number, required: true }, car: { type: String, required: true } })
// 使用 ts 的泛型指定 props 型別 defineProps<{ money: number car?: string }>()
<script lang="ts" setup> // 使用ts的泛型指令props型別 const { money, car = '小黃車' } = defineProps<{ money: number car?: string }>() </script>
如果提供的預設值需要在模板中渲染,需要額外新增設定
// vite.config.js export default { plugins: [ vue({ reactivityTransform: true }) ] }
目標:掌握 defineEmits 如何配合ts使用
const emit = defineEmits(['change', 'update'])
const emit = defineEmits<{ (e: 'changeMoney', money: number): void (e: 'changeCar', car: string): void }>()
目標:掌握ref配合ts如何使用
const money = ref<number>(10) // 推薦寫法,提供效率 const money = ref(10)
interface Todo { id: number content: string done: boolean } // 複雜型別需要指定結構,不能省略 const list = ref<Todo[]>([]) list.value.push({ id: 1, content: '吃飯', done: false })
目標:掌握computed配合typescript如何使用
const leftCount = computed<number>(() => { return list.value.filter((v) => v.done).length }) console.log(leftCount.value)
目標:掌握事件處理常式配合typescript如何使用
const btn = (e: MouseEvent) => { mouse.value.x = e.pageX mouse.value.y = e.pageY } <h2 @click="btn($event)">根元件</h2>
目標:掌握ref操作DOM時如何配合Typescript使用
const imgRef = ref<HTMLImageElement | null>(null) onMounted(() => { console.log(imgRef.value?.src) })
如何檢視一個DOM物件的型別:通過控制檯進行檢視
document.createElement('img').__proto__
**目標:**掌握js中的提供的可選鏈操作符語法
內容
?.
)允許讀取位於連線物件鏈深處的屬性的值,而不必明確驗證鏈中的每個參照是否有效。let nestedProp = obj.first?.second; console.log(res.data?.data) obj.fn?.() if (obj.fn) { obj.fn() } obj.fn && obj.fn() // 等價於 let temp = obj.first; let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);
目標:掌握ts中的非空斷言的使用語法
內容:
!
// 告訴 typescript, 明確的指定obj不可能為空 let nestedProp = obj!.second;
今天幾乎所有的 JavaScript 應用都會引入許多第三方庫來完成任務需求。 這些第三方庫不管是否是用 TS 編寫的,最終都要編譯成 JS 程式碼,才能釋出給開發者使用。 我們知道是 TS 提供了型別,才有了程式碼提示和型別保護等機制。
但在專案開發中使用第三方庫時,你會發現它們幾乎都有相應的 TS 型別,這些型別是怎麼來的呢? 型別宣告檔案
型別宣告檔案:用來為已存在的 JS 庫提供型別資訊
TS 中有兩種檔案型別:1 .ts
檔案 2 .d.ts
檔案
.ts 檔案:
既包含型別資訊又可執行程式碼
可以被編譯為 .js 檔案,然後,執行程式碼
用途:編寫程式程式碼的地方
.d.ts 檔案:
只包含型別資訊
的型別宣告檔案
不會生成 .js 檔案,僅用於提供型別資訊,在.d.ts檔案中不允許出現可執行的程式碼,只用於提供型別
用途:為 JS 提供型別資訊
總結:.ts 是 implementation
(程式碼實現檔案);.d.ts 是 declaration(型別宣告檔案)
如果要為 JS 庫提供型別資訊,要使用 .d.ts
檔案
const strs = ['a', 'b', 'c'] // 滑鼠放在 forEach 上檢視型別 strs.forEach
lib.es5.d.ts
型別宣告檔案中lib.dom.d.ts
)node_modules/axios
目錄解釋:這種情況下,正常匯入該庫,TS 就會自動載入庫自己的型別宣告檔案,以提供該庫的型別宣告。
@types/*
import _ from 'lodash' // 在 VSCode 中,檢視 'lodash' 前面的提示
@types/*
型別宣告包後,TS 也會自動載入該類宣告包,以提供該庫的型別宣告專案內共用型別
建立 index.d.ts 型別宣告檔案。
建立需要共用的型別,並使用 export 匯出(TS 中的型別也可以使用 import/export 實現模組化功能)。
在需要使用共用型別的 .ts 檔案中,通過 import 匯入即可(.d.ts 字尾匯入時,直接省略)。
為已有 JS 檔案提供型別宣告
型別宣告檔案的使用說明
對於 type、interface 等這些明確就是 TS 型別的(只能在 TS 中使用的),可以省略 declare 關鍵字。
對於 let、function 等具有雙重含義(在 JS、TS 中都能用),應該使用 declare 關鍵字,明確指定此處用於型別宣告。
let count = 10 let songName = '痴心絕對' let position = { x: 0, y: 0 } function add(x, y) { return x + y } function changeDirection(direction) { console.log(direction) } const fomartPoint = point => { console.log('當前座標:', point) } export { count, songName, position, add, changeDirection, fomartPoint }
定義型別宣告檔案
declare let count:number declare let songName: string interface Position { x: number, y: number } declare let position: Position declare function add (x :number, y: number) : number type Direction = 'left' | 'right' | 'top' | 'bottom' declare function changeDirection (direction: Direction): void type FomartPoint = (point: Position) => void declare const fomartPoint: FomartPoint export { count, songName, position, add, changeDirection, FomartPoint, fomartPoint }
到此這篇關於TypeScript使用以及型別宣告檔案的文章就介紹到這了,更多相關TypeScript使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45