爲什麼要選擇使用TypeScript,看了就知道原因!

TypeScript 是 JavaScript 的超集(超集:包含關係,比如 C++ 是 C 的超集,TypeScript 是由 JavaScript 發展而來)。

TypeScript 擁有着靜態類型系統,方便開發。

基本的類型聲明

JavaScript

let k = 1;

TypeScript

let k: number = 1;

因爲我們聲明瞭類型,所以如果再給 k 賦字符串類型就會報錯,這種類型提示在開發中能避免很多問題。

關於函數類型

JavaScript

function add (x, y) {	
    return x + y;	
}	
console.log(add(1, 2));

假如我只想讓傳入的變量類型爲數字,那麼在 TypeScript 中就能方便的聲明。

TypeScript

function add (x: number, y: number) {	
    return x + y;	
}	
console.log(add(1, 2));	

對函數返回值也加以類型聲明

TypeScript

function add (x: number, y: number): number {	
    return x + y;	
}

面向對象

不同於傳統的 JavaScript 使用基於原型的繼承,TypeScript 使用基於類的面向對象的方式編程。

經典示例(動物->狗)

JavaScript

// 只要是動物就需要進食,擁有 eat 方法	
function Animal() {}	
Animal.prototype.eat = function() {console.log("eat");};	
// 定義狗,‘繼承’ Animal	
function Dog() {}	
Dog.prototype = Object.create(Animal.prototype);	
Dog.prototype.constructor = Dog;	
// 狗會叫,擁有 bark 方法	
Dog.prototype.bark = function () {console.log("bark");}	
// new 一個小狗	
let miniDog = new Dog();	
// 它‘繼承’了兩個方法	
miniDog.eat();	
miniDog.bark();

我們看看 TypeScript 的寫法

TypeScript

class Animal {	
    // public 代表公有 void 爲無返回值	
    public eat (): void {	
        console.log("eat");	
    }	
}	
// extends 繼承	
class Dog extends Animal {	
    // 它有 bark 方法	
    public bark (): void {	
        console.log("bark");	
    }	
}	
// new 一個小狗	
let miniDog = new Dog();	
miniDog.eat();	
miniDog.bark();	

很顯然,面向對象的寫法易於理解。

公有私有受保護

我們看到了在類的方法前寫着 public 公有的,這樣的修飾使得其子類可以訪問,如果改成私有呢?

當成員被標記成 private時,它就不能在聲明它的類的外部訪問。

640?wx_fmt=png

再說說受保護修飾。

protected 修飾符與 private 修飾符的行爲很相似。但有一點不同 protected 成員在派生類中仍然可以訪問。

640?wx_fmt=png

CocosCreator中應用

在 VSCode 中 TypeScript 的智能提示會使得開發效率直線上升!

屬性聲明

在 CocosCreator 中,我們聲明節點時:

JavaScript

properties: {	
    // 簡寫	
    player: cc.Node,	
    // 完整	
    score: {	
        default: null,	
        type: cc.Node	
    },	
    // 節點數組	
    players: [cc.Node]	
},

TypeScript

// 簡寫	
@property(cc.Node) player: cc.Node = null;	
// 完整	
@property({	
    type: cc.Node	
}) score: cc.Node = null;	
// 節點數組	
@property([cc.Node]) players: cc.Node[] = [];	

方法提示

JavaScript

640?wx_fmt=png

TypeScript

640?wx_fmt=png

模塊引用

不同於 JavaScript 的 require。在 TypeScript 中使用 import 與 export。

示例 A 引用 B 調用其 onLoad 方法

B.ts	
------	
const {ccclass, property} = cc._decorator;	

	
@ccclass	
export default class B extends cc.Component {	

	
    public onLoad (): void {	
        console.log("B onLoad");	
    }	
}	
------	

	
A.ts	
------	
const {ccclass, property} = cc._decorator;	
import B from "./B";	

	
@ccclass	
export default class A extends cc.Component {	
    @property(B) b: B = null;	

	
    public onLoad (): void {	
        this.b.onLoad();	
    }	
}	
------

接口

不同於 JavaScript ,TypeScript 的核心原則之一是對值所具有的結構進行類型檢查。接口的作用就是爲這些類型命名。

舉個例子

interface Person {	
    name: string,	
    age: number	
}	

	
let kuokuo: Person = {	
    name: "kuokuo",	
    age : 1	
}

泛型

工程中,我們不僅要創建一致的定義良好的 API,同時也要考慮可重用性。是否支持多種數據類型就是其指標之一。

我們定一個 temp 函數,返回其輸入。

TypeScript

// 我們不知其類型	
function temp (s) {	
    return s;	
}	
// 我們不能保證其輸出類型與輸入一致	
function temp (s: any): any {	
    return s;	
}	
// 利用泛型限定類型必須一致	
function temp<T> (s: T): T {	
    return s;	
}

結語

TypeScript 的知識遠不止這些,我只是希望通過這篇文章能讓朋友們輕鬆上手 TypeScript,有所收穫。

這裏是更具體的 TypeScript 文檔

https://www.tslang.cn/docs/home.html 

這裏是 CocosCreator 中對 TypeScript 的相關說明

https://docs.cocos.com/creator/manual/zh/scripting/typescript.html?h=type

原文首發KUOKUO的小網站

www.kuokuo666.com 哦~

O(∩_∩)O~~

感謝KUOKUO衆享在假日還爲大家提供這麼優秀的教程,願我們在前進程的道路上一起砥礪前行,共同成長!

640?wx_fmt=jpeg

640?
640?wx_fmt=png

Creator星球遊戲開發社區

長按二維碼,關注我們!

640?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章