摘要:學(xué)習(xí)之路學(xué)習(xí)之路安裝環(huán)境起步開發(fā)工具自動(dòng)編譯文件中的數(shù)據(jù)類型中的函數(shù)中類的定義繼承中的繼承中的繼承類的靜態(tài)屬性和靜態(tài)方法類的多態(tài)的抽象類中的接口中的泛型學(xué)習(xí)之路安裝環(huán)境查看版本起步新建通過命令編譯此時(shí)路徑下
npm install -g typescript
查看版本
tsc -v
1、新建hello.ts
const hello : string = "Hello World!"console.log(hello)
2、通過 tsc 命令編譯
tsc hello.ts
3、此時(shí)路徑下會(huì)生成一個(gè)hello.js文件
var hello = "Hello World!";console.log(hello);
4、node hello.js打開或者引入xxx.html瀏覽器打開查看
1、創(chuàng)建 tsconfig.json
文件 cmd后執(zhí)行命令 tsc --init
生成配置文件
然后就可以自動(dòng)編譯.ts文件
// typescript中為了使編寫代碼更加規(guī)范 有利于維護(hù) 增加了類型校驗(yàn) /* 布爾類型 boolean 數(shù)字類型 number 字符串類型 string 數(shù)組類型 array 元祖類型 tuple 枚舉類型 enum 任意類型 any null 和undefined void類型 never類型*/// 布爾類型 booleanvar flag: boolean = trueflag = false// 數(shù)字類型 numbervar num: number = 123console.log(num);// 字符串類型 stringlet str: string = "fqniu"console.log(str);// 數(shù)組類型 array// 第一種定義let arr1: number[] = [1, 2, 3, 4]console.log(arr1);let arr2: string[] = ["1", "2", "3", "4"]console.log(arr2);// 第二種定義let arr3: Array<number> = [1, 2, 3, 4]let arr4: Array<string> = ["1", "2", "3", "4"]// 第三種定義let arr5: any[] = [1, 2, "3", 4, true]// 元祖類型 tuple (定義數(shù)組的一種方式)let arr7: [string, number, boolean] = ["fqniu", 25, true]// 枚舉類型 enumenum Flag { success = 1, error = -1 }let fs: Flag = Flag.successlet fe: Flag = Flag.errorconsole.log(fs, fe); // 1 -1enum Color { red, blue, yellow } // 如果這里默認(rèn)不賦值的話打印的是索引值 0 1 2let c: Color = Color.yellowconsole.log(c); // 2 enum Color1 { red, blue = 5, yellow } // 如果這里默認(rèn)不賦值的話打印的是索引值 0 1 2let cr: Color1 = Color1.redlet cb: Color1 = Color1.bluelet cy: Color1 = Color1.yellowconsole.log(cr); // 0console.log(cb); // 5console.log(cy); // 6 取上一個(gè)值, blue的值 +1// 任意類型 any let numAny: any = 25numAny = "fqniu"numAny = trueconsole.log(numAny);// any的用處:獲取dom元素節(jié)點(diǎn) 操作dom的樣式等// var oBox: any = document.getElementById("box")// oBox.style.color = "red"// null 和undefinedlet undef: undefinedconsole.log(undef);var nul: nullnul = nullconsole.log(nul);// 一個(gè)元素可能是 number類型 可能是null 可能是undefinedvar ele: number | null | undefinedconsole.log(ele);// void類型 typescript 中的void表示沒有任何類型 一般用于定義方法的時(shí)候 方法沒有返回值function fun(): void { console.log("fun");}fun()// 有返回值時(shí)function fun1(): number { console.log("fun"); return 123}fun1()// never類型:其他類型(包括null 和undefined)的子類型,代表從不會(huì)出現(xiàn)的值,這意味著聲明never的變量只能被never類型所賦值let error:never// error = 25 // 報(bào)錯(cuò)// 正確error = (() => { throw new Error("錯(cuò)誤")})()
// 函數(shù)的定義// js中函數(shù)聲明定義function fun1() { }// js中匿名函數(shù)定義 函數(shù)表達(dá)式var fun2 = function () { }// ts中函數(shù)聲明定義function fun3(): string { return "fqniu"}console.log(fun3()); // fqniu// ts中匿名函數(shù)定義 函數(shù)表達(dá)式var fun4 = function (): number { return 25}console.log(fun4()); // 25// 1、函數(shù)的傳參function fun5(name: string, age: number): string { return `${name} -- ${age}`}console.log(fun5("fqniu", 25)); // fqniu -- 25var fun6 = function (name: string, age: number): string { return `${name} -- ${age}`}console.log(fun6("nfq", 22)); // nfq -- 22// 沒有返回值的方法function fun7(): void { console.log("fun7");}fun7()// 2、函數(shù)的可選參數(shù)// es5里面的方法的實(shí)參和形參可以不一樣// 但是ts必須一致,不一樣的話可以配置可選參數(shù),注意參數(shù)必須配置到參數(shù)的最后一個(gè) 加?function fun8(name: string, age?: number): string { if (age) { return `${name} -- ${age}` } else { return `${name} -- 保密` }}console.log(fun8("fqniu")); // fqniu -- 保密console.log(fun8("fqniu", 25)); // fqniu -- 25// 3、默認(rèn)參數(shù)// es5里面沒辦法設(shè)置默認(rèn)參數(shù),es6和ts可以設(shè)置默認(rèn)參數(shù)function fun9(name: string, age = 20): string { if (age) { return `${name} -- ${age}` } else { return `${name} -- 保密` }}console.log(fun9("fqniu")); // fqniu -- 20console.log(fun9("fqniu", 25)); // fqniu -- 25// 4、剩余參數(shù)function sum1(a: number, b: number, c: number, d: number): number { return a + b + c + d}console.log(sum1(1, 2, 3, 4)); // 10function sum2(...result: number[]): number { var sum = 0 for (var i = 0; i < result.length; i++) { sum += result[i] } return sum}console.log(sum2(1, 2, 3, 4, 5, 6)); // 21// 5、函數(shù)的重載// Java中方法的重載,是指的兩個(gè)或者多個(gè)同名函數(shù),但是他們的參數(shù)不一樣,這時(shí)會(huì)出現(xiàn)函數(shù)重載的情況// ts中的重載:通過為同一個(gè)函數(shù)提供多個(gè)函數(shù)類型定義來實(shí)現(xiàn)多種功能的目的function getInfo(name: string): string;function getInfo(age: number): string;function getInfo(str: any): any { if (typeof str === "string") { return "我叫 " + str } else { return "我的年齡是" + str }}console.log(getInfo("fqniu"));console.log(getInfo(22));// 6、箭頭函數(shù)// this指向上下文setTimeout(() => { console.log("fqniu ws");}, 2000);
// ts中類的定義class Person { name: string; //屬性 前面省略public關(guān)鍵詞 constructor(name: string) { // 構(gòu)造函數(shù) 實(shí)例化類的時(shí)候觸發(fā)的方法 this.name = name; } fun(): void { console.log("fun", this.name); } getName(): string { return this.name } setName(name: string): void { this.name = name }}var p = new Person("fqniu")console.log(p.name); // fqniuconsole.log(p.getName()); //fqniup.setName("niuniu")console.log(p.getName()); // niuniu
function Person() { this.name = "fqniu" /*屬性*/ this.age = 25 this.fun = function () { console.log(this.name + this.age); } } var p = new Person() console.log(p.name); p.fun() // 原型鏈上的屬性會(huì)被多個(gè)實(shí)例共享,但是構(gòu)造函數(shù)不會(huì) Person.prototype.sex = "男" Person.prototype.work = function () { console.log(this.name + "敲代碼"); } p.work() // 添加靜態(tài)方法 Person.getInfo = function () { console.log("我是靜態(tài)方法"); } Person.getInfo() // es中的繼承 繼承Person類 // 1、對(duì)象冒充實(shí)現(xiàn)繼承 function Web1() { Person.call(this) //對(duì)象冒充實(shí)現(xiàn)繼承 } var web1 = new Web1() web1.fun() // 對(duì)象冒充實(shí)現(xiàn)繼承構(gòu)造函數(shù)中的屬性和方法 // web.work() // 報(bào)錯(cuò) index.html:48 Uncaught TypeError: web.work is not a function 但是沒辦法繼承原型鏈上的屬性和方法 // 2、原型鏈實(shí)現(xiàn)繼承 function Web2() { } Web2.prototype = new Person() // 原型鏈實(shí)現(xiàn)繼承 var web2 = new Web2() console.log(web2.name); // fqniu web2.fun() // fqniu25 web2.work() // fqniu敲代碼 // 原型鏈實(shí)現(xiàn)繼承好處:既可以繼承構(gòu)造函數(shù)中的屬性和方法,也可以繼承原型鏈上的方法 // 原型鏈實(shí)現(xiàn)繼承的問題? 當(dāng)實(shí)例化子類的時(shí)候,沒辦法給父類傳參 function Person1(name, age) { this.name = name /*屬性*/ this.age = age this.fun = function () { console.log(this.name + this.age); } } function Web3(name, age) { } Web3.prototype = new Person1() // 原型鏈實(shí)現(xiàn)繼承 var web3 = new Web3("nfq", 25) console.log(web3.name); // undefined 因?yàn)閷?shí)例化子類的時(shí)候,沒辦法給父類傳參 // 組合繼承模式 function Person2(name, age) { this.name = name /*屬性*/ this.age = age this.fun = function () { console.log(this.name + this.age); } } Person2.prototype.sex = "男" Person2.prototype.work = function () { console.log(this.name + "敲代碼"); } function Web4(name, age) { Person2.call(this, name, age) // 對(duì)象冒充繼承,實(shí)例化子類可以給父類傳參 } Web4.prototype = new Person2() // 原型鏈實(shí)現(xiàn)繼承 // 或者 // Web4.prototype = Person2.prototype var web4 = new Web4("nfq", 25) console.log(web4.name); // nfq web4.fun() // nfq25 web4.work() // nfq敲代碼
// ts中實(shí)現(xiàn)繼承 extends、 superclass Person { name: string; //屬性 前面省略public關(guān)鍵詞 constructor(name: string) { // 構(gòu)造函數(shù) 實(shí)例化類的時(shí)候觸發(fā)的方法 this.name = name; } fun(): void { console.log("fun", this.name); } getName(): string { return this.name } setName(name: string): void { this.name = name }}class Web extends Person { constructor(name: string) { super(name) // 初始化父類的構(gòu)造函數(shù) } work(): void { console.log(`${this.name}在敲代碼`); } // fun(): void { // console.log("fun - 子類", this.name); // }}var w = new Web("fqniu")w.fun() // fun fqniuw.work() // fqniu在敲代碼// 類里面的修飾符 typescript里面定義屬性的時(shí)候提供了三種修飾符/* public:公有 —— 在當(dāng)前類里面、子類、類外面都可以訪問 protected:保護(hù)類型 —— 在當(dāng)前類里面,子類都可以訪問,在類外部無法訪問 provite:私有 —— 只有當(dāng)前類里面訪問,子類、類外部都無法訪問 屬性不加修飾
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/124023.html
摘要:簡(jiǎn)介前端發(fā)展迅速,開發(fā)者富有的創(chuàng)造力不斷的給前端生態(tài)注入新生命,各種庫框架工程化構(gòu)建工具層出不窮,眼花繚亂,不盲目追求前沿技術(shù),學(xué)習(xí)框架和庫在滿足自己開發(fā)需求的基礎(chǔ)上,然后最好可以對(duì)源碼進(jìn)行調(diào)研,了解和深入實(shí)現(xiàn)原理,從中可以獲得更多的收獲隨 showImg(https://segmentfault.com/img/remote/1460000016784101?w=936&h=397)...
摘要:前端日?qǐng)?bào)精選騰訊前端團(tuán)隊(duì)社區(qū)源碼分析入門指南一些關(guān)于使用的心得基本類型與引用類型知多少掘金中文第期框架選型周刊第期入門系列模塊車棧重構(gòu)基于的網(wǎng)絡(luò)請(qǐng)求庫某熊的全棧之路的那些奇技淫巧的平凡之路模仿寫個(gè)數(shù)組監(jiān)聽掘 2017-07-01 前端日?qǐng)?bào) 精選 Why you shouldn`t use Preact, Fast-React, etc. to replace React today -...
摘要:前端日?qǐng)?bào)精選專題之類型判斷下百度生態(tài)構(gòu)建發(fā)布基于的解決方案將全面支持從綁定,看語言發(fā)展和框架設(shè)計(jì)掘金譯機(jī)器學(xué)習(xí)與一付費(fèi)問答上線,向你心目中的大牛提問吧產(chǎn)品技術(shù)日志中文第期團(tuán)隊(duì)技術(shù)信息流建設(shè)翻譯基于路由的異步組件加載個(gè)必備的裝逼 2017-07-06 前端日?qǐng)?bào) 精選 JavaScript專題之類型判斷(下) · Issue #30 · mqyqingfeng/Blog 百度Web生態(tài)構(gòu)...
摘要:目前穩(wěn)定在,進(jìn)入了版本狀態(tài),谷歌表示會(huì)長期進(jìn)行支持。版本是谷歌開發(fā)的一款類型的框架,具有優(yōu)越的性能和絕佳的跨平臺(tái)性。于年月正式發(fā)布,目前已發(fā)布到版本。中文翻譯與主站同步的非常及時(shí)。 Angular是一款面向企業(yè)級(jí)應(yīng)用開發(fā)的前端框架,掌握好Angular相關(guān)技術(shù),有助于我們提升開發(fā)效率,編寫高質(zhì)量的前端代碼。 Angular 1.x版本 AngularJS 誕生于2009年,由Misko H...
本文收集學(xué)習(xí)過程中使用到的資源。 持續(xù)更新中…… 項(xiàng)目地址 https://github.com/abc-club/f... 目錄 vue react react-native Weex typescript Taro nodejs 常用庫 css js es6 移動(dòng)端 微信公眾號(hào) 小程序 webpack GraphQL 性能與監(jiān)控 高質(zhì)文章 趨勢(shì) 動(dòng)效 數(shù)據(jù)結(jié)構(gòu)與算法 js core 代碼規(guī)范...
閱讀 1191·2023-04-26 02:38
閱讀 1482·2021-11-22 09:34
閱讀 1190·2021-09-26 10:19
閱讀 3180·2019-08-29 17:15
閱讀 3532·2019-08-29 12:27
閱讀 1722·2019-08-26 13:51
閱讀 1869·2019-08-26 13:47
閱讀 1020·2019-08-26 12:20