TypeScript極速完整進階指南-2中級篇

好,我們繼續誰人極重的話題支解我的財富,上一篇
TypeScript極速完整進階指南-1低級篇
我兒子確切拿到錢了,

class Person{
    name:string;
    age:number;
    food:string = "剁椒魚頭";//表面賦值這裏賦值一碼事
    private money:number = 10000000000000;//別衝動,一定不是中國天國銀行刊行的
    //組織函數,人生下來,歲數就定了
    constructor(name:string,age:number){
        this.name = name;
        this.age = age;
    }
    //eat 大彬哥就特么愛吃魚
    favoriteFood(){
        return this.food;
    }
    makeMoney(salary:number):number{
       return  this.money+=salary;
    }
    //我本身被窩偷着樂,數1背面的0
    touZheLe(){
        return this.money;
    }
}
//1.啥也別說先造個人再說
var dabinge = new Person('大彬哥',18);
//2.想問我多大撩我或許請我用飯問我愛吃啥我一定通知你
console.log(dabinge.age);
console.log(dabinge.favoriteFood());
//3.想問我銀行卡里有多少錢?我一定不通知你
// console.log(dabinge.money);
// 大彬哥每一個月工資不是許多998
dabinge.makeMoney(998);
//4.我本身在被窩能夠偷着看本身餘額,經由過程偷着樂函數看私有屬性
console.log(dabinge.touZheLe());//10000000000998

class bingeSons extends Person{
    isHandsome:boolean = true;
    constructor(name:string,age:number){
        super(name,age);//都是我的老底兒,姓名歲數cls
    }
}
let binSon = new bingeSons('彬哥2.0',18);
console.log(binSon.food);//我兒子錢都到手了

然則,不論是執法或許大彬哥遺言一定不能這麼寫,我大兒子能繼續我的錢,我二兒子也能繼續,我三兒子也能繼續,我大女兒能繼續,二女兒能繼續,這麼寫預計我還沒寫完就掛了,或許執法書很多厚啊!平常都邑這麼說只如果直系親屬這一類人都能繼續我的錢,而不必強調某個人。這裏我基礎不必管單個人。這裏我寫分錢,寫一個迥殊有用而典範的例子,數學要領。我們平經常運用數學要領的時刻沒必要先New一個吧(我不想臭拽那些名詞,比方實例化)。

一定不如許用:

let M = new Math();
M.random()

而是直接用類挪用

Math.random()
Math.PI

這個玩意在類內里叫靜態屬性和要領,用static去潤飾,跟private相似。

class BinMath{
    static PI:number=66666;
    static random():number{
        return Math.random();
    }
}
console.log(BinMath.PI);
console.log(BinMath.random());

好,回到財富分派題目,確切給我後代一部分錢了,然則我照樣個很準確的人我說的是一部分,而不是一切,由於我想捐給慈悲機構一部分。然則這裏題目就來了,人人斟酌,我不可能說清晰一切慈悲基金會的範例,那我豈不是要累死。我只能說這個基金會的大致範例,後續基金會盤算拿錢一定得滿足我說的前提,然後另有本身的現實狀況。我只能籠統的說些前提,比方慈悲機構必需得有名字,存活50年以上的,比方必需財務通明,另有就是教育類的,要處理這個題目就得運用籠統類。籠統類就是只是用來繼續而不是完成的類。實在你看極度的狀況我只說這類慈悲機構必需有名字,現實這個跟沒說一樣,你隨意套一個機構都行,所以說新建一家有名字的機構跟空話一樣,然則其他機構必需相符這些前提。這裏我詮釋清晰沒有為何會有籠統類。比方你要開闢一個現實組件,你曉得這個組件一定得有名字,得有形貌得有版本號,然則這些東西你new出一個對象沒有毛用,它只是一個範例,更適宜的體式格局是 根據這個範例去幹事,也就是繼續它。拿分錢舉例,

abstract class Jigoubiaozhun {
    abstract jigouName: string;
    age:number = 50;
    abstract showMoney(money:number):number;//你只要把我錢公示就好了是網上照樣其他處所我不論,你本身去完成
    constructor(name: string,age:number) {
    }

}
//假設有一類慈悲機構是特地去給戈壁兒童捐錢挖井的,想請求,說相符我請求 
class shamoChildren extends Jigoubiaozhun{
    public jigouName = "戈壁挖井基金協會"
    private money: number = 5000000;
    showMoney():number{
        return this.money; 
    }
    constructor(name:string,age:number){
        super(name,age);
    }
}

var xinJiangWajing = new shamoChildren('新疆挖井隊',50);
console.log(xinJiangWajing.showMoney());

大彬哥分錢圓滿結束!

正寫着教程呢,這時刻你劉姨打電話跟我說,別吹噓逼了,趕忙找對象,要找個懂事的,工作好的,疼你的,然則你曉得,你問她誰啊?她老是只要範例(接口),讓你本身去完成(implements),就像接口一樣。接口就是這麼一個玩意,我們看看你劉姨的需求。

 interface girl {
    dongshi:boolean;
    job:string;
    tengNi(): boolean;//接口不能完成要領 只要劃定,跟你劉姨真像
 }

 class GirlFriend implements girl{
     dongshi=true;
     job = 'good';
     tengNi(){
         return true;
     }
 }
var cuihua = new GirlFriend();
console.log(cuihua.job);

為啥要有interface呢,太好理解了你劉姨怕我走旁門唄,好我們看看代碼出事兒的狀況:

function renshi(meizi:any){
    console.log(meizi.name);
}
function yuehui(meizi:any){
    console.log(meizi.name+'晚上一同看電影吧,記得帶身份證');
}
const meizi = {
    name:"白富美"
}
renshi(meizi);
yuehui(meizi);

我修正一點,

const meizi = {
    mingzi:"白富美"
}

完蛋了,約會三件套都得改……有同學說我改meizi一個處所不就好了,如許有兩個題目1.你懂大彬哥的妹子有一個增強連那末多你怎樣改?第二如果能在寫的時刻就防備這麼寫多好?滿足你需求。

interface date{
    mingzi:string;
}
function renshi(meizi:date){
    console.log(meizi.name);//報錯,直接抹殺毛病在搖籃當中
}
function yuehui(meizi:date){
    console.log(meizi.name+'晚上一同看電影吧,記得帶身份證');
}
const meizi = {
    name:"白富美"
}
renshi(meizi);
yuehui(meizi);

然則你曉得,不是每一個女孩用約會三件套都好使,比方運動型女孩,你能夠找她去打羽毛球,嫻靜型女孩你能夠去帶她聽音樂會,書香門第的女孩你能夠帶她去走走潘家園……你得對症下藥,然則題目來了,你劉姨雖然給你引見一增強連的女孩,然則我在晤面之前我是不曉得她是什麼範例,這就輕易發生你對着古典的女孩約她打羽毛球的題目。用代碼示意,就是有時刻我們一開始並不曉得參數的範例,只要在實行的時刻才曉得。

function showData(data:any){
    return data;
}
showData('leolau').length;
showData(12).length;//這特么不就廢了么
showData({ name: 'leo' }).length;
showData([12, 5, 8]).length;

咋整?TS內里又一個牛逼的東西叫做泛型。泛型的意義就是,先別管範例是啥,先到我碗里來,然後處着的時刻我在看她是哪一種範例。好,我們看下咋整。

function showData<T>(data:T){
    return data;
}
console.log(showData<string>('leolau').length);
console.log(showData<number>(12).length);
console.log(showData({ name: 'leo' }).length);
console.log(showData([12, 5, 8]).length);

話不投機,就地報錯,固然了泛型也能夠用在範例上,比方說長頭髮大眼睛是否是許多是溫順的女孩啊,就像數組極可能裝的是数字一樣。

const arr: Array<number> = [12, 5, 8];
arr.push('約么');//人家数字範例,你總不好放string吧

函數參數也能夠泛型,實在就是不曉得啥範例。

function showArray<T>(data:T[]){//這裏雖然是泛型然則劃定了必需死數組
    for(var i = 0;i<data.length;i++){
        console.log(data);
    }
}
showArray<string>(['leo','lau']);

說到妹子的話差異照樣很大的,有些人家景平常有些人是含着金鑰匙長大的,然則優越的家景只是人家的裝潢,而不是決議一切的,畢竟順境加個人努力勝利的人許多,我說這句話是想說ts內里也有裝潢器,它就像手槍的消聲器一樣。代碼以下:

function hasKey(constructor:Function){
    console.log('我含着金鑰匙呢');
}
@hasKey
class Person{
    name:string;
    age:number;
    constructor(name: string, age: number){
        this.name = name;
        this.age = age;
        console.log('我是' + name +',本年'+age+'歲我自滿了嗎');
    }
}

const baifumei = new Person('白富美',18);
console.log(baifumei);

說了許多關於類,和接口的東西,這些實在很大程度上是為了復用和代碼簡約!

面我要說別的一個東西,讓代碼越發簡約和有用的東西-模塊化。

新建./Math/two.ts

export const double:number = 2;
export function doubleKill(num:number):number{
    return num * double;
}

新建techMod.ts並引入,

import { double, doubleKill} from "./Math/two";
console.log(double, doubleKill(3));

報錯,export未定義,原因是原生js哪怕ES6瀏覽器都不支撐模塊化,咋整,有用模塊加載庫。

個人比較喜好,SystemJs,為啥喜好它?喜好須要來由嗎?好吧這麼說輕易挨打,由於它的語法極可能成為未來的事實範例,如許能夠讓你省的在學一遍。

npm install systemjs --save

啥也不說了,上一梭子代碼。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="/node_modules/systemjs/dist/system.js"></script>
    <script>
        SystemJS.config({
            baseURL: '/',
            packages:{
                '/':{
                    defaultExtension: 'js'
                }
            }
        });

        // loads /modules/jquery.js
        SystemJS.import('techMod.js');
    </script>
</head>
<body>
</body>
</html>

到現在我們已搞定了大部分TypeScript,然則我曉得你在想啥,曉得了學問該怎樣現實運用呢?比方說怎樣搭建一個工作流開闢項目呢?或許說怎樣用TS去結合到angular、react、vue框架呢?

我曉得人人想的是你是否是想要講TS怎樣用到Angular中啊?既然人人呼聲那末高,那我就講TypeScript怎樣搭建工作流開闢React運用……
更多精彩內容迎接人人寓目我的SF講座TypeScript極速完整進階指南

    原文作者:前端大彬哥
    原文地址: https://segmentfault.com/a/1190000014535192
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞