JAVAts中简单的用法和存储器 get set 的用法

一. class 种使用static的方法

// 定义Point的类型
interface Point {
	x: number,
	y: number
}

class Grid {
	//定义一个静态的对象类型
	static init = {
		x: 0,
		y: 0
	};

    //我们在定义一个方法
    area(point: Point) {
        // static  可以使用 this来访问到
		const x = point.x - this.init.x;
		// 同样也可以使用class 类名来访问
		const y = point.y - Grid.init.y;
        return Math.sqrt(x*x + y * y);
    }
}

const grid = new Grid();
// class 内的static 我们可以在外面访问到
console.log(Grid.init.x + "   " + Grid.init.y);
// 没有定义为static的方法 只能是实例去获取
grid.area({x: 3, y: 4});

二.class 中get 和set的用法
如果你要对name进行一些操作的话 可以使用 get 和 set 来进行操作

class Company {
	// 记住 你要使用的名字的话 前面必须要加上_
	private _fullName: string;
	
	//get 的用法
	get fullName(): string{           // 函数后(): string 这个的意思是 要求函数返回的类型必须是 string
		return this._fullName;
	}

    // set 的用法
    set fullName(newName: string) {
    	console.log("这里可以写一些你想要的操作的方法");
		this._fullName = newName;
	}
}

// 执行class 
const c = new Company();
c.fullName = "我是小白";

三. readonly 的用法

class Animal {
	readonly age: number;
	constructor(dogAge: number) {
		this.age = dogAge;
	}
}

const animal = new Animal(6);
animal.age = 10;     // 会提示 该属性是不可以修改的

四.参数属性的用法

class Animal {

	// 参数属性的话 , 就相当于是这两句话的意思,使code 书写起来更简洁和直观
	//this.age = dogAge;
	//readonly age: number;
	constructor(readonly age: number, private name: string) {
	}
}

const animal = new Animal(6, "小白");

五. 函数参数的可选择性

function fullName (firstName: string, lastName: string) {
	return firstName + "," + lastName;
}
// 这样子定义的话 下面的调用方法 就必须是
fullName("帅比", "小白");

// 在lastName 前面多了一个?  你可以理解为正则表达式中的? 0个或者1个
function fullName (firstName: string, lastName?: string) {
	return firstName + "," + lastName;
}
// 下面两种用法都是可以的   一个简单的? 就完成了java中的overload了 感觉很酷耶
fullName("帅比", "小白");
fullName("帅比");

//当然我们也可以通过es6中的  ...不定参数 也可以实现, 但是这就跟ts 没关系啦
function fullName(...arr) {

}

六. 使用泛型

// T 是一个类型变量 它是一种特殊的变量 只用于表示类型而不是值
function Generic<T>(anyParam: T): T {
	return anyParam;
}

// 完整写法
Generic<string>(anyParam: "小白");    // 结果是  => "小白"
// 推理性写法
Generic(anyParam: "小白");           // 小白 为string 就可以推断出 前面的为<string>  所以你可以省略<string>

==========================================
interface LengthWise {
	length: number;
}
// 这样子的话 我们就可以拿到 参数里面的length 了 
function Generic<T extends LengthWise>(anyParam: T): T {
    console.log(anyParam.length);
	return anyParam;
}
// 因为 string 自己就有 length的属性
Generic(anyParam: "小白");  

// 如果是number的话 它没有, 所以需要自己定义个length  来符合规范
Generic(anyParam:{length: 1, other: 10});  
========================================

//泛型接口
interface Result<T> {
	result: boolean,
	data: T;
}

interface Company{
	id: number;
	name: string;
}

// 这个是可以约定你返回的结果
const result: Result<Company> = axios.post("...");
const result: Result<Company> = {
	result: false,
	data: {
		id: 1,
		name: "小白"
	}
}

七.方法的重载

class Dog {
	constructor(name: string) {

	}
    
    // 写方法的重载 在ts实现中  要先声明 然后在实现
    eat(food: string): boolean;
    //{result: boolean, msg: string} 是方法要返回的结构样式
    eat(food: {name: string, amount: number}): {result: boolean, msg: string};
	
	// 这里是方法的实现  eat(food: string | {name: string, amount: number})  这样子写也是一样的
	// 等同于 eat(food: any) 只不过 上面的写法更加的精确一点
	eat(food: any): any {
		if(typeof food === 'string') {
			return food === '狗粮';
		} else {
			const result = food.name === '狗粮';
			return {
				result: result,
				msg: result? "是狗粮": "不是狗粮"
			};
		}
	}
}

这就是一些简单的用法了,如果有任何问题,欢迎评论指出,谢谢。

TAG: JAVA

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.itniuboke.com/article/22197.html