TypeScript学习日记三
class Person {
name: string = '孙悟空'
static age: number = 18;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
bark() {
console.log(this);
}
}
const per = new Person();
console.log(per);
console.log(per.name,per.age);
console.log(Person.age);
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
sayHello() {
console.log()
}
}
class Dog extends Animal {
run() {
console.log(`${this.name}在跑~~~`)
}
}
class Cat extends Animal {
age: number;
constructor(name: string, age: number) {
super(name);
this.age = age;
}
sayHello() {
console.log('覆盖父类的sayHello方法')
super.sayHello();
}
}
abstract class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
abstract sayHello():void;
}
class Dog extends Animal {
run() {
console.log(`${this.name}在跑~~~`)
}
}
class Cat extends Animal {
age: number;
constructor(name: string, age: number) {
super(name);
this.age = age;
}
sayHello() {
console.log('覆盖父类的sayHello方法')
super.sayHello();
}
}
type myType = {
name: string;
age: number;
}
interface myInterface {
name: string;
age: number;
}
interface myInterface {
sex: string;
sayHello():void;
}
class MyClass implements myInter {
name: string;
constructor(name: string) {
this.name = name;
}
sayHello(): void {
}
}
抽象类有实例方法和抽象方法
接口只有抽象方法,只用于实现
...
public name: string
private age: number
getAge() {
return this.age
}
setAge(value: number) {
this.age = value
}
protected num: number
...
constructor(public name: string,public age: number) { }
等价于:
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age
}
function fn<T>(a:T): T {
return a;
}
fn(10)
fn<string>('hello')
function fk<T,K>(a:T,b:k):T{
console.log(b);
return a;
}
fk<number,string>(123,'hello')
interface Inter{
length: number;
}
function fn3<T extends Inter>(a: T): number {
return a.length
}
fn3('123')
class MyClass<T> {
name: T;
constructor(name: T) {
this.name = name;
}
}
const mc = new MyClass<string>('孙悟空');