let mz: string = ''
let scoreList: Array<boolean> = [true, false, true];
let name2: String = ''
const name4: number = 0
/**
* 类的修饰符
* 一共有两种
* 1.可见性修饰符里面有三个属性
* public 默认修饰符
* protected --搜保护的属性(这个属性只能在类以及子类里面使用)
* private ---私有的 (只能在自身中使用*****重点:出了自身或者在子类里面是不可用的)
* 2.只读修饰符
* readonly
*
*/
class Aniame{
name: String
// 构造函数
constructor(name:string) {
this.name=name
}
// 实例方法
eat(): void{
console.log(this.name,'会拆家说');
}
}
const a = new Aniame('二哈')
console.log(a.name);
a.eat()
// *****************************************************************
// class class类的继承子继承
class Aniame {
name: String
// // 构造函数
constructor(name: String) {
this.name = name
}
// // 实例方法
// eat(): void {
// console.log(this.name, '会跑。会吃~');
// }
// }
// class Dog extends Aniame {
// age: number
// constructor(name: String, age: number) {
// super(name)
// this.age = age
// }
// }
// let b = new Dog('金毛', 1)
// console.log(b);
// b.eat()
// 接口约束类 接口方法 interface implements
// interface Ianiame{
// name: String
// eat():void
// }
// class Aniame implements Ianiame{
// name: String = '金毛'
// eat() {
// console.log(`${this.name} 正在唱歌!`)
// }
// }
// let a = new Aniame()
// a.eat()
// 该接口约束类型里面要求必须有sing方法和name属性
// interface Singabel {
// name: string
// sing(): void
// }
// // 要求 Person 实现 Singabel 的属性和方法
// class Person implements Singabel {
// name: string = '小蕾'// 必须存在,因为Singabel里面有name属性
// constructor(name:string) {
// this.name=name
// }
// sing() {// 必须存在,因为Singabel里面有sing方法
// console.log(`${this.name} 正在唱歌!`)
// }
// }
// let d = new Person("金毛")
// // d.sing()
// console.log(d);
/**
* 枚举 定义:一个命名函数
* 关键字enum生命
*/
// 一个数据如果有默认值就取默认值依次递增 如果没有默认值 从 0 开是递增
// enum Iane{
// 'left',
// 'right'=10,
// 'up',
// 'down'
// }
// console.log(Iane.down);
// 泛型函数 fn后跟上一个自定义名 函数里的参数受 自定义名的约束,那么调用fn跟个<>里面要定义的类型(传入fn后的那个类型值)
function fn<A>(x:A):A {
return x
}
fn<number>(1)
fn<string>('')
fn(true)