參數(shù)
參數(shù)類型
可以在變量的后面用冒號(hào)來(lái)指定該參數(shù)的類型
var myname: string = "hello"
myname = 0 // 提示類型錯(cuò)誤
// typescript有類型推斷
var myage = "xixi"
myage = 13 // 提示類型錯(cuò)誤
不僅可以在變量后面指定類型,還可以在方法后以及方法需要的參數(shù)后面
function test(name: string): string {
return "test";
}
在類中定義參數(shù)類型
class Person {
name: string;
age: number;
}
默認(rèn)參數(shù)
給參數(shù)一個(gè)默認(rèn)值
var myname: string = "hello world"
給方法中的參數(shù)指定一個(gè)默認(rèn)值
function test(a: string, b: string = "jojo") {
// 可以只傳a值
}
帶默認(rèn)值的參數(shù)要放到函數(shù)的最后面
可選參數(shù)
通過(guò)問(wèn)號(hào)為函數(shù)指定一個(gè)可選參數(shù)
function test(a: string, b?: string, c: string = "jojo") {
//
}
可選參數(shù)必須放在必傳參數(shù)后面
函數(shù)
拓展參數(shù)
通過(guò)拓展運(yùn)算符為函數(shù)添加一個(gè)參數(shù)集
function test(...args) {
args.forEach()
}
該函數(shù)可以接受任意數(shù)量的參數(shù)
function test(a, b, c) {
console.log(a)
console.log(b)
console.log(c)
}
var list = [1,2,3,4];
test(...list);
// 只會(huì)輸出1,2,3
// 因?yàn)閠est方法只能接受三個(gè)參數(shù)
generator函數(shù)
通過(guò)*來(lái)聲明一個(gè)generator函數(shù)
function * doSomething() {
console.log('start');
yield;
console.log('finish');
}
var func = doSomething();
func.next(); // 輸出start
func.next(); // 輸出finish
在每次調(diào)用next()方法后,程序執(zhí)行到y(tǒng)ield就停止
析構(gòu)表達(dá)式
通過(guò)表達(dá)式將對(duì)象或數(shù)組拆解成任意數(shù)量的變量
function getStock() {
return {
code: 'IBM',
price: 100
}
}
var {code, price} = getStock()
變量名稱需要一一對(duì)應(yīng)
可以通過(guò)冒號(hào)給對(duì)象里面的修改名稱
var {code: codex, price} = getStock()
var array1 = [1, 2, 3, 4];
var [a, b] = array1;
// a = 1, b = 2
var [ , , , d] = array1;
// d = 4
var [a, b, ...others] = array1;
// a = 1, b = 2, others = [3, 4]
表達(dá)式以及循環(huán)
箭頭函數(shù)
var array = [1, 2, 3, 4, 5]
array.filter(value => value%2 == 0)
forEach()、for in 和 for of
var array = [1, 2, 3, 4];
array.desc = "array";
array.forEach(value = > console.log(value));
// 不允許break,循環(huán)對(duì)象的值
// 1, 2, 3, 4
for(var n in array) {
console.log(n);
}
// 循環(huán)對(duì)象屬性名稱
// 1, 2, 3, 4, array
for(var n of array) {
console.log(n);
}
// 忽略屬性,可以通過(guò)break跳出循環(huán)
// 1, 2, 3, 4
面向?qū)ο筇匦?/h2>
類(class)
訪問(wèn)控制符
public共有的,在類內(nèi)部外部均可以使用,默認(rèn)
private私有的,在類的內(nèi)部使用
protected保護(hù)的,類以及其子類中可以使用
class Person {
// 構(gòu)造函數(shù)
constructor() {
console.log("new")
}
name;
eat() {
console.log("eat")
}
}
var p1 = new Person();
p1.name = "batman";
p1.eat();
var p2 = new Person();
p2.name = "superman";
p2.eat();
繼承(extends)
通過(guò)super關(guān)鍵字調(diào)用父類的方法
class Employee extends Person {
// 構(gòu)造函數(shù)
constructor() {
super(); // 調(diào)用父類的構(gòu)造函數(shù)
console.log("new")
}
}
泛型
通過(guò)<>來(lái)指定數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)的內(nèi)容類型
var work: Array<Person> = [];
接口(Interface)
用來(lái)建立某種代碼約定,使得其他開(kāi)發(fā)者在調(diào)用某個(gè)方法或者創(chuàng)建新的類時(shí)必須遵循接口所定義的代碼約定
通過(guò)interface關(guān)鍵字聲明一個(gè)接口
interface IPerson {
name: string;
age: number;
}
class Person() {
constructor(public config: IPerson) {
}
}
通過(guò)implements關(guān)鍵字使類實(shí)現(xiàn)接口中的方法
interface Animal {
eat();
}
class Sheep implements Animal {
eat() {
console.log("eat grass")
}
}
class Tiger implements Animal {
eat() {
console.log("eat meat")
}
}
類型定義文件(*.d.ts)
通過(guò)該文件類型,可以與js其他的模塊協(xié)同工作