成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

5分鐘上手TypeScript踩坑

array_huang / 1963人閱讀

摘要:前言最近在學(xué)習(xí),發(fā)現(xiàn)的官方文檔中的分鐘上手輔導(dǎo)教程中會有許多新手可能很難理解的地方,所以記錄一下聲明一下我用的版本是以后版本可能有所不同什么是維基百科上說是一種由微軟開發(fā)的自由和開源的編程語言。

前言

最近在學(xué)習(xí)TypeScript,發(fā)現(xiàn)TypeScript的官方文檔中的5分鐘上手TypeScript輔導(dǎo)教程中會有許多新手可能很難理解的地方,所以記錄一下

聲明一下我用的版本是

npm install [email protected] -g

以后版本可能有所不同

什么是TypeScript

維基百科上說 “TypeScript是一種由微軟開發(fā)的自由和開源的編程語言。它是JavaScript的一個(gè)嚴(yán)格超集,并添加了可選的靜態(tài)類型和基于類的面向?qū)ο缶幊??!?/p>

從名字上我們就可以看出 TypeScript 和 JavaScript 不同的地方就是type,因?yàn)?TypeScript 相較于 JavaScript 多了類型檢查這一功能,都知道 JavaScript 是一門動(dòng)態(tài)類型、靜態(tài)作用域的語言,而 TypeScript 的更像變成了一門靜態(tài)類型的語言

如何運(yùn)行TypeScript

瀏覽器只能運(yùn)行js、html、css語言,那ts要如何運(yùn)行在瀏覽器上呢,我們要記住

瀏覽器可以運(yùn)行js
瀏覽器不能運(yùn)行ts
要把ts變成js才可以在瀏覽器上運(yùn)行
tsc會把ts轉(zhuǎn)化成js

那tsc是什么,如何獲取呢,需要我們學(xué)會使用npm,然后安裝

npm install -g typescript

就可以得到tsc和ts-node這兩個(gè)命令了

構(gòu)建第一個(gè)TypesScript文件

在五分鐘上手TypeScript的文檔中,要求我們將以下代碼輸入到greeter.ts文件里

function greeter(person) {
    return "Hello, " + person;
}

let user = "Jane User";

document.body.innerHTML = greeter(user);

因?yàn)樯厦嫖覀冋f過瀏覽器不能運(yùn)行ts,而document.body.innerHTML又需要我們在瀏覽器上運(yùn)行,所以我們需要先把ts文件轉(zhuǎn)化成js文件,這樣會比較麻煩,所以下面我都建議改成用console.log

function greeter(person) {
    return "Hello, " + person;
}

let user = "Jane User";

console.log(greeter(user));

然后

ts-node greeter.ts

可以在終端中直接打出輸出結(jié)果

類型注解

在上面的代碼中,我們還看不出ts和js的區(qū)別,下面對上面的代碼進(jìn)行一個(gè)改變

function greeter(person: string) {
    return "Hello, " + person;
}

let user = "Jane User";

console.log(greeter(user));

在參數(shù)后加個(gè)冒號然后加個(gè)類型,這樣就相當(dāng)于給參數(shù)加上的了一層禁錮,當(dāng)你輸入的參數(shù)并不是字符串類型的時(shí)候

function greeter(person: string) {
    return "Hello, " + person;
}

let user = 123;

console.log(greeter(user));

進(jìn)行編譯轉(zhuǎn)化成js的時(shí)候就會報(bào)錯(cuò),如下

greeter.ts(7,21): error TS2345: Argument of type "number" is not assignable to parameter of type "string".

這樣子你發(fā)現(xiàn)錯(cuò)誤的時(shí)機(jī)就從運(yùn)行到瀏覽器上階段提前到了編譯階段

另外值得一提的是如果,參數(shù)是undefined,那么類型檢查并不會報(bào)錯(cuò),例如

function greeter(person: string) {
  return "Hello, " + person;
}

let user = undefined;

console.log(greeter(user));

運(yùn)行之后會正確輸出

Hello, undefined
接口

學(xué)過 java 或者 c# 的人可能會很熟悉這個(gè),就是相當(dāng)于規(guī)定了一個(gè)對象一定需要包含幾個(gè)屬性,例如官方文檔所給的例子,如果我們的對象不符合規(guī)則少寫一個(gè)屬性

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person: Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user = { firstName: "Jane"};

console.log(greeter(user));

就會報(bào)錯(cuò)

greeter.ts(12,21): error TS2345: Argument of type "{ firstName: string; }" is not assignable to parameter of type "Person".
Property "lastName" is missing in type "{ firstName: string; }".

但如果我們多寫了屬性

interface Person {
  firstName: string;
  lastName: string;
}

function greeter(person: Person) {
  return "Hello, " + person.firstName + " " + person.lastName;
}

let user = { firstName: "Jane", lastName: "User" , m:"ss"};

console.log(greeter(user));

它仍然是可以正常運(yùn)行的

TypeScript 的類的創(chuàng)建有點(diǎn)像 ES6 但是多了一個(gè) public 的關(guān)鍵詞,熟悉 java 的同學(xué)可能會知道,但是在ts中這個(gè)public的具體是什么作用,在官方文檔給的例子中可以看出

class Student {
    fullName: string;
    constructor(public firstName, public middleInitial, public lastName) {
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
}

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person : Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user = new Student("Jane", "M.", "User");

console.log(greeter(user));

實(shí)際上就相當(dāng)于

class Student {
  fullName: string;
  firstName: string;
  middleInitial: string;
  lastName: string;
  constructor(firstName, middleInitial, lastName) {
    this.firstName = firstName
    this.middleInitial = middleInitial
    this.lastName = lastName
    this.fullName = firstName + " " + middleInitial + " " + lastName;
  }
}

interface Person {
  firstName: string;
  lastName: string;
}

function greeter(person: Person) {
  return "Hello, " + person.firstName + " " + person.lastName;
}

let user = new Student("Jane", "M.", "User");

console.log(greeter(user));
后記

以上就是對5分鐘上手TypeScript的解讀,我也在繼續(xù)學(xué)習(xí)當(dāng)中,ts相較與js更加嚴(yán)格,可以在js運(yùn)行之前發(fā)現(xiàn)錯(cuò)誤,代碼更不容易出現(xiàn)bug,看得出來是js從動(dòng)態(tài)類型向靜態(tài)類型的一種轉(zhuǎn)變,但是上面我寫的時(shí)候也發(fā)現(xiàn),undefined類型并沒有檢查出來,所以可能還在不停完善中,但是不得不承認(rèn)TypeScript開發(fā)會更舒服

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99513.html

相關(guān)文章

  • Vue + TypeScript + Element 項(xiàng)目實(shí)踐(簡潔時(shí)尚博客網(wǎng)站)及踩坑

    摘要:前言本文講解如何在項(xiàng)目中使用來搭建并開發(fā)項(xiàng)目,并在此過程中踩過的坑。具有類型系統(tǒng),且是的超集,在年勢頭迅猛,可謂遍地開花。年將會更加普及,能夠熟練掌握,并使用開發(fā)過項(xiàng)目,將更加成為前端開發(fā)者的優(yōu)勢。 showImg(https://segmentfault.com/img/remote/1460000018720573); 前言 本文講解如何在 Vue 項(xiàng)目中使用 TypeScript...

    luckyyulin 評論0 收藏0
  • 關(guān)于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...

    sutaking 評論0 收藏0
  • 關(guān)于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...

    khs1994 評論0 收藏0
  • vscode-eslint的踩坑實(shí)踐--typescript無法格式化

    摘要:的踩坑實(shí)踐無法格式化引言最近開發(fā)的前端項(xiàng)目隨著開發(fā)的人員越來越多,代碼規(guī)范已經(jīng)是一個(gè)很難避免的問題了,雖然百度有這個(gè)規(guī)則檢查,但是不論是或者是項(xiàng)目本地都沒有配置或檢查,完全靠自覺,這是件非常扯淡的事。 vscode-eslint的踩坑實(shí)踐--typescript無法格式化 引言 最近開發(fā)的前端項(xiàng)目隨著開發(fā)的人員越來越多,代碼規(guī)范已經(jīng)是一個(gè)很難避免的問題了,雖然百度有fecs這個(gè)規(guī)則檢查...

    harryhappy 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<