cocos creator TS 使用详解二

Posted LANGZI7758521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos creator TS 使用详解二相关的知识,希望对你有一定的参考价值。

/**
 * 接口的作用,在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用接
 * 接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,他只规定这批类里面必须提供
 * 某些方法,提供这些方法的类就可以满足实际需要,typescript中的接口类似于java,同事还增加了更灵活的接口类型,包括属性、函数、
 * 可索引和类等。
 * 接口是定义的规范,可以复用
 * 关键字 interface
 */
// 1. 属性接口 对json的约束

//ts定义方法只能对单一,进行约束
function printLabel(labelInfo: {
    label: string}): void {
    console.log(labelInfo.label)
}
// printLabel({name:"张三"})//错误写法
printLabel({
    label: '李四'
}) //正确写法 传入参数必须有label

// 属性接口 对批量方法传人参数进行约束

interface FullName {
    firstName: string; //注意以;结束
    secondName: string;
}

function printName(info: FullName) {
    //必须传入对象 firstName secondName
    console.log(info.firstName + info.secondName)
    //info.age,虽然传人了,但是在FullName中未定义,报错,所以严格按照接口要求
}
//printName({firstName:'firstName'}) //错误,约束必须传入对象 firstName secondName

// printName({
//  firstName:'张',
//  secondName:'三' ,
//  age:20 //报错 这种写法,传入值只能包含接口定义的属性
// })
//这样定义在外部就可以传入接口写未定义的属性,但是不能在方法中使用,因为未定义该属性

var obj = { //这里的obj为interface类型,不能定义为object
    firstName: '张',
    secondName: '三',
    age: 20
}
printName(obj);

//接口可选属性
interface FullName2 {
    firstName: string;
    lastName?: string; //可选属性
}

function printName2(info: FullName2) {
    console.log(info.firstName + info.lastName) //张 undefined
}
printName2({
    firstName: '张'
})

/*2. 函数类型接口:对方法传人的参数 以及返回值进行约束 */

// 加密的函数类型接口
interface encrypt {
    (key: string, value: string): string
}
//模拟一下
var md5: encrypt = function (key: string, value: string): string {
    //模拟进行了加密算法
    return key + value
}
console.log(md5('123', '456'))

/* 可索引接口, 数组,对象的约束(不常用) */
interface UserArr {
    [index: number]: string
}
var ar: UserArr = ['aaa', 'bbb']
console.log(ar[0])
/* 可索引接口 对对象的约束 */
interface UserObj {
    [index: string]: string
}
var obj1: UserObj = { name: '张三', age: '20' }

/* 类类型接口: 对类的约束 和 抽象类有点相似 */
interface Anima {
    name: string;
    eat(str: string): void;
}
class Pig implements Anima {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    eat(str: string) {
        console.log(this.name + str)
    }
}
var pig = new Pig('小猪')
pig.eat('粮食')


/*接口扩展:接口可以继承接口  */
interface Props {
    eat(): void;
}
//继承接口
interface Pepole extends Props {
    work(): void;
}
//待继承的类
class Programmer {
    public name: string;
    constructor(name: string) {
        this.name = name
    }
    coding(code: string) {
        console.log(this.name + code)
    }
}


class Webs extends Programmer implements Pepole {
    constructor(name: string) {
        super(name)
        this.name = name
    }
    eat() {
        console.log(this.name + '吃饭')
    }
    work() {
        console.log(this.name + "写代码")
    }
}
var webs = new Webs('小王')
webs.eat()
webs.work()
webs.coding('写ts')

const { ccclass, property } = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {


}

以上是关于cocos creator TS 使用详解二的主要内容,如果未能解决你的问题,请参考以下文章

COCOS CREATOR(TS)之按钮事件

Cocos Creator TS加载龙骨

COCOS CREATOR(TS)之setTimeOut

cocos creator bug集锦

COCOS CREATOR(TS)之节点鼠标事件

COCOS CREATOR(TS) 之HTTP通信