TypeScript

自動拆分字符串

function test(templage, name, age) {
    console.log(templage);// ["hello,my name is ", ",i am ", ""]
    console.log(name);// Aaayang
    console.log(age);// 18
}

var myname = 'Aaayang';
var getAge = function() {
    return 18;
};
test`hello,my name is ${myname},i am ${getAge()}`;

參數(shù)類型

// 參數(shù)類型:在參數(shù)名稱后面使用冒號來指定參數(shù)的類型
var myname: string = "Aaayang";
myname = "Bbb";

// 類型推斷機(jī)制
var alias = "Jiangjun";
// 推斷這里應(yīng)該是字符串大溜,賦值數(shù)字會報(bào)錯
alias = 'a';

// 任意類型
var aaa: any = "Doudou";
// aaa賦值啥都行
aaa = 13;

var age: number = 13;
var man: boolean = true;

// 不需要任何返回值
function test() :void {

}
// 要返回string
function test2() :string {
    return "";
}

function test3(name: string) :string {
    return "";
}
// 只能傳字符串
test3('aaa');

// 自定義類型
class Person {
    name: string;
    age: number;
}
var zhangsan: Person = new Person();
zhangsan.name = "zhangsan";
zhangsan.age = 18;

參數(shù)默認(rèn)值

var myname: string = "Aaayang";

// 注意帶默認(rèn)值的參數(shù)要聲明在后面
function test(a:string, b:string, c:string = 'Doudou') {
    console.log(a);
    console.log(b);
    console.log(c);
}

// 正常只有傳3個參數(shù)才不會報(bào)錯,第三個參數(shù)有默認(rèn)值,這里傳2個也行
test('111', '222', '333');
test('xxx', 'yyy');

可選參數(shù)

var myname: string = "Aaayang";

// 注意可選參數(shù)必須聲明在必選參數(shù)的后面
function test(a:string, b?:string, c:string = 'Doudou') {
    console.log(a);
    console.log(b);
    console.log(c);
}

// 正常只有傳3個參數(shù)才不會報(bào)錯傍念,第三個參數(shù)有默認(rèn)值,這里傳2個也行
test('xxx');// xxx,undefined,Doudou
test('aaa', 'bbb');// aaa,bbb,Doudou
test('111', '222', '333');// 111,222,333

Rest and Spread

// 把任意數(shù)量參數(shù)轉(zhuǎn)為數(shù)組
function func1(...args) {
    args.forEach(function(arg) {
        console.log(arg);
    });
}

func1('a', 'b', 'c', 'd');
// 把任意數(shù)量參數(shù)轉(zhuǎn)為數(shù)組
function func1(a, b, c) {
    console.log(a);
    console.log(b);
    console.log(c);
}

var args = [1, 2];
func1(...args);// 1,2,undefined

var args2 = [6, 7, 8, 9];// 6,7,8
func1(...args2);

Generator方法

function* doSomething() {
    console.log("start");

    yield;

    console.log("finish");
}
var func1 = doSomething();
func1.next();// start
func1.next();// finish
yield寫法研究
function* getStockPrice(stock) {
    while(true) {
        yield Math.random() * 100;// ??
    }
}

var priceGenerator = getStockPrice("IBM");
var limitPrice = 15;

var price = 100;

while(price > limitPrice) {
    price = priceGenerator.next().value;
    console.log(`the generator return ${price}`);
}
console.log(`buying at ${price}`);

解構(gòu)賦值

function getStock() {
    return {
        code: "IBM",
        price: 100
    }
}

// var stock = getStock();
// var code = stock.code;
// var price = stock.price;

var {code, price} = getStock();
var {code: codex, price} = getStock();
console.log(code);// IBM
console.log(codex);// IBM
console.log(price);

箭頭函數(shù)

// 單行
var sum = (arg1, arg2) => arg1 + arg2;
console.log(sum(1, 2));

// 多行
var sum2 = (arg1, arg2) => {
    var result = arg1 + arg2;
    console.log(result);
}
sum2(3, 4);

var sum3 = () => {
    console.log('無參數(shù)的');
}
sum3();

var sum4 = arg1 => {
    console.log(`只有一個參數(shù)也是不需要寫括號的${arg1}`);
}
sum4('Aaayang');

var myArray = [1, 2, 3, 4, 5];
var aaa = myArray.filter(item => item % 2 == 0);
console.log(aaa);
箭頭函數(shù)中的this
// 正常寫
function getStock(name:string) {
    this.name = name;
    setInterval(function() {
        console.log("my name is " + this.name);
    }, 1000);
}
var stock = new getStock('Aaayang');// my name is
// 箭頭函數(shù)寫法
function getStock2(name:string) {
    this.name = name;
    setInterval(() => {
        console.log("my name is " + this.name);
    }, 1000);
}
var stock2 = new getStock2('Aaayang');// my name is Aaayang

forEach, for in, for of

var myArray = [1, 2, 3, 4];
myArray.desc = "four number";// tsc編譯會報(bào)錯,便宜JS是可以執(zhí)行的

// forEach會忽略desc,不能用break跳出循環(huán)
myArray.forEach(value => console.log(value));

// desc屬性也會被循環(huán)
for(var n in myArray) {
    // console.log(n);// 0, 1, 2, 3, desc
    console.log(myArray[n]);// 1, 2, 3, 4, four number
}

// 可以break钝吮,forEach一樣不會循環(huán)desc
for(var n of myArray) {
    if(n > 2) break;
    console.log(n);
}

class Person {
    name;// 默認(rèn)public
    // private name;// 私有的
    // protected name;// 內(nèi)部和子類可以訪問
    eat() {
        console.log("i am eating");
    }
}

var p1 = new Person();
p1.name = "Aaayang";
p1.eat();

var p2 = new Person();
p2.name = "Jiangjun";
p2.eat();
構(gòu)造函數(shù)
class Person {
    /*constructor(public name: string) {
    }*/
    // 和上面等價
    constructor(name: string) {
        this.name = name;
    }
    name;
    eat() {
        console.log(this.name);
    }
}

var p1 = new Person('Aaayang');// 必須傳參
p1.name = "Aaayang";
p1.eat();
繼承
class Person {
    constructor(public name: string) {
        console.log('haha');
    }
    name;
    eat() {
        console.log('i am eating');
    }
}

class Employee extends Person {
    constructor(name: string, code: string) {
        super(name);// 子類的構(gòu)造函數(shù)必須調(diào)用父類的構(gòu)造函數(shù)
        console.log('xixi');
        this.code = code;
    }

    code: string;
    work() {
        super().eat();// 調(diào)用方法
        this.doWork();
    }
    private doWork() {// e1.doWork()不讓直接干活,規(guī)定先吃飯?jiān)俑苫?        console.log('do work');
    }
}

var e1 = new Employee("Aaayang", "1");
e1.work();

泛型

...

接口

interface IPerson {
    name: string;
    age: number;
}

class Person {
    // 接口:作為方法的參數(shù)的類型聲明
    constructor(public config: IPerson) {

    }
}

var p1 = new Person({
    name: "Aaayang",
    age: 18
});
interface Animal {
    eat();
}

class Sheep implements Animal {
    eat() {
        // 類必須要實(shí)現(xiàn)接口對應(yīng)的方法
        console.log('i eating grass');
    }
}

模塊

a.ts

export var prop1;

export function func1() {

}

export class Class1 {
    
}

index.ts

import {prop1, func1, Class1} from "./a";

注解

類型定義文件

// 在TypeScript中使用已有的工具包
// from github "DefinitelyTyped"
*.d.ts
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末板辽,一起剝皮案震驚了整個濱河市奇瘦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劲弦,老刑警劉巖耳标,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓶您,居然都是意外死亡麻捻,警方通過查閱死者的電腦和手機(jī)纲仍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門呀袱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人郑叠,你說我怎么就攤上這事夜赵。” “怎么了乡革?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵寇僧,是天一觀的道長摊腋。 經(jīng)常有香客問我,道長嘁傀,這世上最難降的妖魔是什么兴蒸? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮细办,結(jié)果婚禮上橙凳,老公的妹妹穿的比我還像新娘。我一直安慰自己笑撞,他們只是感情好岛啸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茴肥,像睡著了一般坚踩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓤狐,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天瞬铸,我揣著相機(jī)與錄音,去河邊找鬼础锐。 笑死赴捞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的郁稍。 我是一名探鬼主播赦政,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耀怜!你這毒婦竟也來了恢着?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤财破,失蹤者是張志新(化名)和其女友劉穎掰派,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體左痢,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡靡羡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了俊性。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片略步。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖定页,靈堂內(nèi)的尸體忽然破棺而出趟薄,到底是詐尸還是另有隱情,我是刑警寧澤典徊,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布杭煎,位于F島的核電站恩够,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏羡铲。R本人自食惡果不足惜蜂桶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望也切。 院中可真熱鬧屎飘,春花似錦、人聲如沸贾费。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褂萧。三九已至押桃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間导犹,已是汗流浹背唱凯。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谎痢,地道東北人磕昼。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像节猿,于是被迫代替她去往敵國和親票从。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容