第一課, 體驗typescriptjavascript
第三課, 泛型vue
第四課, 解讀高級類型java
看了vue conf 2019的視頻, 特別興奮, vue3要來了! vue3是用typescript開發的, 我揣測在vue的帶領下typescript會成爲主流呢, 要不先學點. react
我是19年初開始使用的typescript, 自從開始用上了就喜歡上了, 真的愛不釋手, 最愛他幾點:webpack
我也但願更多的同行都開始用typescript, 讓他成爲前端漲工資的又一個工具(回想下webpack和vue給你帶來什麼, 最先"吃螃蟹"的人, 確定享受最大的紅利).git
放幾個我學習typescript過程當中寫的項目,自從用了typescript就特別喜歡造輪子, 寫的很差, 就是有份熱情, 拋磚引玉, 你們確定能寫出更好的.es6
手勢庫: github.com/any86/any-t…github
命令式調用vue組件: github.com/any86/vue-c…
工做中經常使用的一些代碼片斷: github.com/any86/usefu…
一個mini的事件管理器: github.com/any86/any-e…
經過typescript命令行工具, 把typescript轉成javascript, 從而支持在瀏覽器運行.
注: 後面的文章中typescript簡稱ts, javascript簡稱js.
ts和js最大的區別就是ts多了類型註解功能, 經過名字中的"type"也能看出語言的重點在"類型"上. 這個類型分爲基礎類型和高級類型, 高級類型就是經過基礎類型組成的自定義類型.
ts中包含了boolean / number / string / object / 數組(數組的表示有多種, 後續文章會展開) / 元組 / 枚舉 / any / Undefined / Null / Void / Never
any是本文的重點, 一會會對他着重講解.
大部分狀況是對object類型作更細的標註, 此處很少講, 先放個例子瞭解便可, 知道關鍵詞interface便可, 中文名"接口", 後續章節會展開.
interface Article {
title: string;
count: number;
content: string;
tags: string[]; // 數組裏的元素都是字符串
}
複製代碼
當咱們使用vscode編輯器的時候, 編輯器會根據咱們的"類型註解"進行代碼提示和錯誤提示:
類型寫錯了, 也會提示:
interface A {
a:number,
b:string
}
let obj:A = {a:123,b:'456'};
複製代碼
npx tsc hello.ts
複製代碼
好了咱們能夠看下文件內部多了一個hello.js, 打開看看:
var obj = { a: 123, b: '456' };
複製代碼
代碼中的"類型註解"不見了 ,咱們的ts被編譯成js了, 是否是很神奇.
interface A {
a:number,
b:string
}
// 錯誤, 會提示b的類型錯誤, 應該爲string類型
let obj:A = {a:123,b:456};
複製代碼
any表明任意類型, 這個類型特別適合ts新手, 初期有些類型不知道如何表達, 咱們就能夠暫時使用any表達, 等熟練ts後再標註精準的類型.
下面的狀況新手可能就不會了, 覺得n標記爲number, 可是循環中i大於5的時候就是字符串了, 因此ts就會提示錯誤.
let n:number;
for(let i = 0;i<10;i++) {
if(i <= 5) n = 10;
else n = '100';
}
// ts提示: 不能將類型「"100"」分配給類型「number」
複製代碼
做爲新手若是初期你不知道"聯合類型"這個概念, 你就能夠直接把n標記爲any:
// 熟練後會是這麼標記的
// let n:string|number
let n:any;
for(let i = 0;i<10;i++) {
if(i <= 5) n = 10;
else n = '100';
}
複製代碼
忽然想起若是咱們的配置不同,可能會看到不同的提示, 因此補充下個人ts配置, 請你們學習的時候按照這個配置來學習本課程, 每一個配置我都加了註釋, 若是譯文請在下方留言, 知無不言.
用法也很簡單, tsconfig.json放在你項目的根目錄便可:
// tsconfig.json
{
"compilerOptions": {
// 不報告執行不到的代碼錯誤。
"allowUnreachableCode": true,
// 必須標註爲null類型,才能夠賦值爲null
"strictNullChecks": true,
// 嚴格模式, 強烈建議開啓
"strict": true,
// 支持別名導入:
// import * as React from "react"
"esModuleInterop": true,
// 目標js的版本
"target": "es5",
// 目標代碼的模塊結構版本
"module": "es6",
// 在表達式和聲明上有隱含的 any類型時報錯。
"noImplicitAny": true,
// 刪除註釋
"removeComments": true,
// 保留 const和 enum聲明
"preserveConstEnums": false,
// 生成sourceMap
"sourceMap": true,
// 目標文件所在路徑
"outDir": "./lib",
// 編譯過程當中須要引入的庫文件的列表
"lib": [
"dom",
"es7"
],
// 額外支持解構/forof等功能
"downlevelIteration": true,
// 是否生成聲明文件
"declaration": true,
// 聲明文件路徑
"declarationDir": "./lib",
// 此處設置爲node,才能解析import xx from 'xx'
"moduleResolution": "node"
},
// 入口文件
"include": [
"src/main.ts"
]
}
複製代碼
19年ts必定大火, 請你們放心學ts吧, 初期開發能夠先用any體驗ts, 慢慢學習1個月左右其實就能夠實戰了, 這篇後我也會在本月陸續更新完本typescript的教程, 保證你們在一個月內學會.