TypeScript
🌸 您好,欢迎您的阅读,等君久矣,愿与君畅谈.
🔭 § 始于颜值 § 陷于才华 § 忠于人品 §
📫 希望我们可以进一步交流,共同学习,共同探索未知的技术世界 稀土掘金 OR GitHub.
# 10. 属性的封装
-
修饰符
public: 修饰的属性可以在任意位置访问及修改,默认值private: 私有属性,只能在类内部进行访问及修改,通过类中添加方法使得私有属性可以被外部访问protected: 只能在当前类和当前类的子类中访问及修改
-
封装属性提升安全性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57class Personn {
private name:string;
private age:number
constructor(name:string,age:number) {
this.name = name;
this.age = age;
}
/*
getter方法用来读取属性,
setter方法用来设置属性,这两个方法被称为属性的存取器。
*/
get name_easy() {
return this.name;
}
set name_easy(value: string) {
this.name= value;
}
get age_easy(){
return this.age;
}
set age_easy(value:number){
this.age = value;
}
/* // 定义方法,用来获取name属性
getterName(){
return this.name;
}
// 定义方法,用来设置name属性
setterName(value:string){
this.name = value;
}
// 定义方法,用来获取age性
getterAge(){
return this.age;
}
// 定义方法,用来设置age属性
setterAge(value:number){
// 用来判断数据是否合法
if (value>=0) {
this.age = value;
}
} */
}
// 简洁版,直接将属性定义在构造函数中
class A{
constructor(public name:string,public age:number){
}
}
const personn = new Personn('李四',20);
/* personn.setterName('王二');// 修改name的值
personn.setterAge(-12);// 修改age的值 */
personn.name_easy = 'test';
personn.age_easy = 23;
console.log(personn.name_easy);
console.log(personn.age_easy);
console.log(personn);
# 11. 泛型
-
泛型的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30// 在定义函数和类时,遇到类型不明确就可以使用泛型
function fn<T>(a:T):T{
return a;
}
// 1.不指定泛型,直接使用,利用TS的自动类型检测
fn(12);
// 2. 指定泛型
fn<string>("hello");
// 泛型可以同时指定多个
function fn2<T,K>(a:T,b:K):T {
console.log(b);
return a;
}
fn2<number,string>(12,'test');
//函数可以使用泛型
// T extends Inter 表示泛型T必须是Inter实现类(子类)。
interface Inter{
demo:number
}
function fn3<T extends Inter>(a:T):number {
return a.demo;
}
// 类中也可以使用泛型
class myClass<T> {
name:T;
constructor(name:T) {
this.name = name
}
}
const mc = new myClass<string>('张三');
TypeScript
http://example.com/2020/09/01/9003_TypeScript/