TypeScript 新特性介紹

TypeScript 新特性介紹

字符串新特性

多行字符串

  1. JavaScript 定義多行字符串
var word = 'aaa' +
    'bbb' + 
    'ccc'
  1. TypeScript 定義多行字符串
var word = `
aaa
bbb
ccc
`

字符串模板

var myName = "Zhang San";

var getName = function() {
    return "zhangsan"
}

console.log(`hello ${myName}`);
console.log(`hello ${getName()}`);

自動(dòng)拆分字符串

function test(template, name, age) {
    console.log(template);
    console.log(name);
    console.log(age);
}

var myName = "Zhang san";

var getAge = function() {
    return 18;
}

test `my name is ${myName}, I'm ${getAge()}`;

參數(shù)新特性

參數(shù)類型

在參數(shù)名稱后面使用冒號(hào)來制定參數(shù)的類型

聲明類型

  • any
  • string
  • number
  • booleam
  • void (不需要返回值的函數(shù))
var myName: string = "zhang san";
var alias: any = 'xixi'; // 可以設(shè)置變量為任何類型

myName = 12; // IDE報(bào)錯(cuò)

// 方法聲明類型
function test(): void {
    
}

// 參數(shù)聲明類型
function test(name: string): string {
    return name;
} 

// 自定義類型
class Person {
    name: string;
    age: number
}

var lisi: Person = new Person();

lisi.age = 12;
lisi.name = 'lisi';

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

在參數(shù)聲明后面用等號(hào)來指定參數(shù)的默認(rèn)值

function test(a:string, b:string, c:string = 'xixi') {
    console.log(a);
    console.log(b);
    console.log(c);
}

test('x', 'y');

可選參數(shù)

在方法的參數(shù)聲明后面用問號(hào)來標(biāo)明此參數(shù)為可選參數(shù)

function test(a:string, b?:string, c:string = 'xixi') {
    console.log(a);
    console.log(b);
    console.log(c);
}

test('x'); // "x" undefined "xixi"

函數(shù)新特性

Rest and Spread 操作符

用來聲明任意數(shù)量的方法參數(shù)

function fun1 (...args) {
    args.forEach(function (arg) {
        console.log(arg);
    })
}

generator 函數(shù)

控制函數(shù)的執(zhí)行郭晨個(gè)才菠,手動(dòng)暫停和恢復(fù)代碼執(zhí)行

function* doSomething() {
    console.log('start');
  
    yield;
    
    console.log('end');
}

var fun1 = doSomething();

fun1.next();
fun1.next();

destructuring 析構(gòu)表達(dá)式

通過表達(dá)式將對(duì)象或數(shù)組拆解成任意數(shù)量的變量

對(duì)象

function getStock() {
    return {
        code: "IBM",
        price: 100,
        name: {
            name1: 'zhanagsan',
            name2: 'lisi'
        }
    } 
}

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

// ts
var {code, price} = getStock();
var {code: codex, price, name: {name2}} = getStock();

數(shù)組

var array1 = [1, 2, 3, 4];
var [,,number1, number2] = array1;

console.log(number1, number2);
var array1 = [1, 2, 3, 4];
var [number1, number2, ...others] = array1;

console.log(others); // [3, 4]
var array1 = [1, 2, 3, 4];
var [number1, number2, ...others] = array1;

function doSomething([number1, number2, ...others]) {
    console.log(number1);
    console.log(number2);
    console.log(others);
}
doSomething(array1);

表達(dá)式與循環(huán)

箭頭表達(dá)式

用來聲明匿名函數(shù)甫题,消除傳統(tǒng)匿名函數(shù)的this 指針問題

function getStock(name: string) {
    this.name = name;
    
    setInterval(function() {
        console.log(this.name);
    }, 1000);
    
    setInterval(()=> {
        console.log(this.name);    
    }, 1000)
}

var stock = new getStock("IBM");
var myArray = [0, 1, 2, 3, 4, 5];

console.log(myArray.filter(value => value % 2 == 0));

循環(huán) for-of

var myArray = [1, 2, 3, 4, 5];
myArray.desc = "four";

myArray.forEach(value => console.log(value)); // 不允許打破循環(huán)
for(let n in myArray) { // 屬性會(huì)循環(huán)出來
    console.log(n);
}

for(let n of myArray) { // 循環(huán)可以被打斷,不循環(huán)屬性
    console.log(n);
}

面向?qū)ο筇匦?/h2>

類(Class)

class Person {
    public name;
    public eat() {
        console.log('eat');
    }   
}

var p1 = new Person();

p1.name = 'man';
p1.eat();

var p2 = new Person();
p2.name = 'woman';
p2.eat();

訪問控制符

  • public: (默認(rèn)控制符)
  • protected: (受保護(hù)的,內(nèi)部和子類中訪問到,外部不可訪問)
  • private: (私有的)

構(gòu)造函數(shù)

class Person {
    constructor(public name: string) {
        this.name = name;
        console.log('hahaha');
    }

    eat() {
        console.log(this.name);
    }

}

var person1 = new Person('zhangsan1');

person1.eat(); 

類的繼承

extends 獲得所有屬性和方法

class Employee extends Person {
    code: string;
    
    work() {
        console.log('work');
    }

}

var e1 = new Employee('lisi');
e1.eat();
e1.work();

super 調(diào)用父類的構(gòu)造函數(shù)

class Person {
    constructor(public name: string) {
        this.name = name;
        console.log('父類的構(gòu)造函數(shù)');
    }

    eat() {
        console.log('eating' + this.name);
    }

}

class Employee extends Person {
    constructor(name: string, code: string) {
        super(name);
        console.log('子類的構(gòu)造函數(shù)')
        this.code = code;
    }
    
    code: string;
    
    work() {
        super.eat();
        this.doWork();
    }
    
    private doWork() {
        console.log('working');
    }

}

var e1 = new Employee('lisi', '123');

e1.work();

泛型 generic

參數(shù)化的類型皆看,一般用來限制集合的內(nèi)容

class Person {
    constructor(public name: string) {
        this.name = name;
        console.log('父類的構(gòu)造函數(shù)');
    }

    eat() {
        console.log('eating' + this.name);
    }

}

class Employee extends Person {
    constructor(name: string, code: string) {
        super(name);
        console.log('子類的構(gòu)造函數(shù)')
        this.code = code;
    }
    
    code: string;
    
    work() {
        super.eat();
        this.doWork();
    }
    
    private doWork() {
        console.log('working');
    }

}
var works: Array<Person> = []; // 數(shù)組里面只能放入 Person 對(duì)象

works[0] = new Person('zhangsan');
works[1] = new Employee('lisi', '123');

console.log(works);

接口 Interface

用來建立某種代碼約定仓坞,使得其他開發(fā)者調(diào)用某個(gè)方法或者創(chuàng)建新的類時(shí)必須遵循接口所定義的代碼約定。

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

class Person {
    constructor(public config: IPerson) {
        
    }
}

var p1 = new Person({
    name: 'zhanggsan',
    age: 19
});
interface Animal {
    eat();
}

class Sheep implements Animal {
    eat() {
        console.log('i eat grass');
    }
}

class Tiger implements Animal {
    eat() {
        console.log('i eat meat');
    }
}

模塊 Module

模塊可以幫助開發(fā)者將代碼分割為可重用的單元悬蔽。開發(fā)者可以自己決定將模塊中的哪些資源(類扯躺、方法、變量)暴露出去提供外部使用蝎困,哪些資源只能在模塊內(nèi)使用录语。

export var a1 = 1;
var a2 = 2;

export function func1() {
    console.log('func1');
}

function func2() {
    console.log('func2');
}

export class testClass1 {

}

class  testClass2 {
    
}

import {a1, func1, testClass1} from "./a";

注解 annotation

為程序的元素(類、方法禾乘、變量)加上更直觀更明了的說明澎埠,這些說明信息與程序的業(yè)務(wù)邏輯無關(guān),而是提供指定的工具或框架使用始藕。

import { Component } from '@angular/core'

@Component({
    selector: 'app-root',
    templateUrl: './app.component.html',
    styleUrls: ['./app.components.css']
})

export class AppComponent {
    title = 'app works';
}

類型定義文件 (*.d.ts)

類型定義文件用來幫助開發(fā)者在TypeScript 中使用已有的 JavaScript 的工具包蒲稳。
如 JQuery 等

下載地址:https://github.com/DefinitelyTyped/DefinitelyTyped
工具:https://github.com/typings/typings

export var a1 = 1;
var a2 = 2;

export function func1() {
    $('#xxxx').show(); // 引入JQuery 類型定義文件 index.d.ts
    console.log('func1');
}

function func2() {
    console.log('func2');
}

export class testClass1 {

}

class  testClass2 {
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氮趋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子江耀,更是在濱河造成了極大的恐慌剩胁,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祥国,死亡現(xiàn)場(chǎng)離奇詭異昵观,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)舌稀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門啊犬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壁查,你說我怎么就攤上這事觉至。” “怎么了睡腿?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵语御,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我嫉到,道長(zhǎng)沃暗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任何恶,我火速辦了婚禮,結(jié)果婚禮上嚼黔,老公的妹妹穿的比我還像新娘细层。我一直安慰自己,他們只是感情好唬涧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布疫赎。 她就那樣靜靜地躺著,像睡著了一般碎节。 火紅的嫁衣襯著肌膚如雪捧搞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天狮荔,我揣著相機(jī)與錄音胎撇,去河邊找鬼。 笑死殖氏,一個(gè)胖子當(dāng)著我的面吹牛晚树,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雅采,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼爵憎,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼慨亲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宝鼓,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤刑棵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后愚铡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛉签,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年茂附,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了正蛙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡营曼,死狀恐怖乒验,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒂阱,我是刑警寧澤锻全,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站录煤,受9級(jí)特大地震影響鳄厌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妈踊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一了嚎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧廊营,春花似錦、人聲如沸露筒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劣砍。三九已至香嗓,卻和暖如春靠娱,著一層夾襖步出監(jiān)牢的瞬間像云,已是汗流浹背迅诬。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工等脂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搏屑,地道東北人辣恋。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓撵摆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鲫剿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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