const varFn = (arg) => {
return arg;
};
const gVarFn = <T>(arg: T): T => {
return arg;
};
interface fnT<T> {
(arg: T): T;
}
const gInterfaceFn: fnT<string> = (t: string): string => {
return t
};
class Person<T, K> {
name: string;
age: number;
setInfo: (age: T, name: K) => void;
getName: () => T;
add: (x: T, y: K) => T
}
const person = new Person();
person.setInfo = (age, name) => {
};
person.add = (x, y) => x;
person.getName = () => this.name;
interface LengthInterface {
length: number
}
const fn = <T extends LengthInterface>(x: T) => x.length;
const create = <T>(c: { new(): T; }): T => {
return new c();
};
class Animal {
name: string;
}
class Jump {
canJump: <T>() => boolean;
}
class Run {
canRun: <T>() => boolean;
}
class Dog extends Animal {
skill: Run;
}
class Cat extends Animal {
skill: Jump;
}
const getSkill = <T extends Animal>(c: new () => T): T => {
return new c();
};
getSkill(Cat).skill.canJump();
getSkill(Cat).name;
getSkill(Dog).skill.canRun();