1.类
class Person {
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
this.age = age;
}
say():void{
console.log(`我的名字是${this.name}年龄是${this.age}`);
}
static food:string;
static eat():void{
console.log(this);
console.log(`我的食物是${this.food}`);
}
}
new Person('小田',22).say();
Person.food = '甜筒';
Person.eat();
class Student extends Person {
book:string;
constructor(name:string,age:number,book:string){
super(name,age);
this.book = book
console.log(Student.food);
}
say():void{
console.log(`student里的我的名字是${this.name}年龄是${this.age}数${this.book}`);
}
static sayfood():void{
console.log(this.food)
}
}
Student.food = 'dwadwadwa';
Student.sayfood();
2.类属性修饰符
class Person {
public name:string;
protected age:number;
private gender:string;
constructor(name:string, age:number, gender:string){
this.name = name;
this.age = age;
this.gender = gender;
}
say():void{
console.log(`name=${this.name},age=${this.age},gender=${this.gender}`);
}
}
class Student extends Person{
constructor(name:string, age:number, gender:string){
super(name,age,gender);
}
say():void{
}
}
let p = new Student('xt',11, '1');
p.say();
3.类只读属性
class Person {
readonly name:string;
constructor(name:string){
this.name = name;
this.name =' 11111';
}
}
let p = new Person('dwadw');
console.log(p.name);
4.类方法修饰符
class Person {
name:string;
age:string;
gender:string;
constructor(name:string,age:string,gender:string){
this.name = name;
this.age = age;
this.gender = gender;
}
public sayName():void{
console.log(`person我的名字是${this.name}`);
}
protected sayAge():void{
console.log(`person我的年龄是${this.age}`);
}
private sayGender():void{
console.log(`person我的性别是${this.gender}`);
}
}
class Student extends Person{
constructor(name:string,age:string,gender:string){
super(name,age,gender);
}
say():void{
this.sayGender();
}
}
let p = new Student('小田','22','男');
let p1 = new Person('111', '34', '1');
p.say();
p1.sayName();
p1.sayAge();
p1.sayGender();
5.类可选参数
class Person {
name:string;
age?:string;
constructor(name:string,age?:string){
this.name = name;
this.age = age;
}
setname(name:string,age:string):void{
this.name = name;
this.age = age;
}
}
let p = new Person('laotianwy');
p.setname('xiaotian','23');
class Person {
name:string;
age:number;
gender:number;
protected constructor(name:string,age:number,gender:number){
this.name = name;
this.age = age;
this.gender = gender;
}
say():void{
console.log(`我的名字是${this.name},我的年龄是${this.age},我的性别是${this.gender}`);
}
}
class Student extends Person{
constructor(name:string,age:number,gender:number){
super(name,age,gender);
}
}
let p = new Person('name',11,22);
let p1 = new Student('name',11,22);
6.类构造器参数使用public
class Student {
constructor(public name:string,public age:string){
}
}
new Student('xxxxxxx','22222');
7.类的可选属性
class Person {
name:string;
age?:number;
constructor(name:string,age?:number){
this.name = name;
this.age = age;
}
}
new Person('laotian');
class Student {
constructor(public name:string,public age?:number){
}
}
let p = new Student('laitan');
8.存储器
class Person {
_age:number = 0;
private _name:number = 0;
set age(val:number){
console.log(val);
if(val < 0 ){
throw new Error('人的年龄不能小于0');
}
this._age = val;
}
get age():number{
console.log('进入了get age 的方法');
return this._age;
}
set name(val:number){
console.log(val,'name');
this._age = val;
}
get name():number{
return this._name;
}
}
let p = new Person();
p.age = 42;
console.log(p.age);
9.抽象类
abstract class Person1{
abstract name:string;
abstract say():void;
eat():void{
console.log(`${this.name}正在吃饭`);
}
}
class Student1 extends Person1{
name:string = 'xiaotian';
say():void{
console.log(`我的名字是${this.name}`)
}
}
let ab1 = new Student1();
ab1.say();
ab1.eat();
10.类与接口
interface PersonFace{
name:string;
say():void;
}
class Person implements PersonFace {
name:string;
constructor(name:string) {
this.name = name;
}
say():void{
}
}
class Honey {
name:string = 'xt';
age:number = 22;
say():void{
console.log(`我的名字是${this.name}年龄是${this.age}`);
}
}
interface PersonHoneyInterface extends Honey{
gender:string;
}
class StudentHoney implements PersonHoneyInterface {
name:string = 'xiaotian';
age:number = 21;
gender:string = 'nan';
say():void{
console.log(`大娃大娃多哇我`);
}
}
class StudentHoney1 extends Honey implements PersonHoneyInterface {
gender:string = 'dwadwa';
}
let stu1 = new StudentHoney1();
console.log(stu1);
11.类和泛型
class Student<t> {
arr:t[] = [];
add(values:t):void{
this.arr.push(values);
}
all():t[]{
return this.arr;
}
}
let initStudent = new Student<number>();
initStudent.add(1);
initStudent.add(2);
initStudent.add(3);
initStudent.all();
12.同名接口合并现象
interface TestFace{
name:string;
}
interface TestFace{
age:number;
}
interface TestFace{
gender:boolean;
}
class Person implements TestFace{
name:string = 'dwadw';
age:number = 2123;
gender:boolean = true;
}
13.枚举-字符串枚举和数字枚举
enum Gender{
Male,
Female
}
console.log(Gender.Male);
console.log(Gender.Female);
const num = 55;
function getNum(){
return 999;
}
enum SexList{
man = num,
female = getNum()
}
console.log(SexList.man);
console.log(SexList[55]);
console.log(SexList.female);
enum gender1{
male,
female
}
console.log(gender1.male);
console.log(gender1[0]);
const str1 = 'laotian';
function getStr(){
return 'abc;'
}
enum gender2{
female = 'www.xinlang.com',
yao = female
}
console.log(gender2.female);
console.log(gender2.yao);
14.枚举成员类型和联合类型
enum Gender{
male = 'www.baidu.com',
female = 'www.laotian.com',
}
interface TestInterface{
age:Gender.male
}
class Person implements TestInterface{
age:Gender.male = Gender.male;
age:Gender.male = true;
}
let value:(number|string);
enum Gender1 {
Male,
Female
}
interface testInterface{
age:Gender1
}
class Person1 implements testInterface {
age = Gender1.Female;
}
15.运行时枚举
interface TestInterface{
name:string;
age:number;
}
enum Gender{
male,
female
}
var Gender1;
(
function(Gender1){
Gender1[Gender1['male'] = 0] = 'male';
Gender1[Gender1['female'] = 1] = 'female';
}
)(Gender1 || (Gender1 = {}))
enum Gender100{
male,
female
}
console.log(Gender100.male === 0);
const enum Gender200{
male,
female
}
console.log(Gender200.male === 0);
16.类型推断
let values;
values = 2222;
values = 'dwadwa';
let values1 = 2132;
let arr1 = [1,'a'];
window.onmousedown = (event) => {
console.log(event.target);
}
17.类型兼容性
interface TestInterface{
name:string
}
let p1 = {name:'laotian'};
let p2 = {age:22};
let p3 = {name:'laotian',age:22};
let t:TestInterface;
t = p1;
t = p2;
t = p3;
interface Test1Interface{
name:string;
children:{
age:number
}
}
let p4 = {name:'laotian',children:{age:22}}
let p5 = {name:'laotian',children:{age:'age'}}
let t2:Test1Interface;
t2 = p4;
t2 = p5;
18.函数兼容性
let fn1 = (x:number,y:number) => {};
let fn2 = (x:number) => {};
fn1 = fn2;
let f1 = (x:number) => {};
let f2 = (x:number) => {};
let f3 = (x:string) => {};
f1 = f2;
f2 = f1;
let t1 = ():number => 123;
let t2 = ():number => 123;
let t3 = ():string => '123';
t1 = t2;
t2 = t1;
let change1 = (x:(number|string)) => {};
let change2 = (x:number) => {};
change1 = change2;
change2 = change1;
let return1 = (x:boolean):(number|string) => x ? 123:'123';
let return2 = (x:boolean):number => 456;
return1 = return2;
return2 = return1;
function add(x:number,y:number):number;
function add(x:string,y:string):string;
function add(x,y){
return x+y;
}
function sub(x:number,y:number):number;
function sub(x,y):number{
return x-y;
}
let add1 = add;
let sub1 = sub;
add1 = sub1;
sub1 = add1;
19.枚举兼容性
enum Gender{
male,
female
}
let value:Gender;
value = Gender.male;
value = 0;
enum Gender1{
male,
female
}
enum Gender2{
male,
female
}
let val1:Gender1;
val1 = Gender1.male;
enum StringEnum{
male = 'abc',
female = 'def'
}
let valueStr:StringEnum;
valueStr = StringEnum.male;
valueStr = 'abc';