interface LengthWise {
length: number;
}
function indentity<T extends LengthWise>(arg: T): T {
console.log(arg.length);
return arg;
}
const result = indentity<string>("1212121");
console.log(result);
class GenercNumber<T> {
zeroValue: T | undefined;
add: (x: T, y: T) => void | undefined;
}
const myGenericNumber = new GenercNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function (x, y) {
return x + y;
};
// 泛型是想函数重载
function getData<T>(value: T): T {
return value;
}
getData<number>(1212);
getData<string>("1212");
// 泛型 接口
interface ConfigFn {
<T>(value: T): void;
}
const getData2: ConfigFn = function <T>(value: T): void {
console.log(value);
};
getData2<number>(2);
getData2<string>("1212");
// 动态泛型
interface Bookmarks {
msg: string;
}
class BookmarksServers<T extends Bookmarks> {
items: T[] = [];
}
class BookmarksServers2<T extends Bookmarks = Bookmarks> {
items: T[] = [];
}
const s = new BookmarksServers2();
// items = [
// {
// msg: "223223",
// },
// ];
let err1: readonly Set<number>;
let err2: readonly Array<number>;
let ok1: readonly boolean[];
let ok2: readonly [number, string];