1. interface LengthWise {
    2. length: number;
    3. }
    4. function indentity<T extends LengthWise>(arg: T): T {
    5. console.log(arg.length);
    6. return arg;
    7. }
    8. const result = indentity<string>("1212121");
    9. console.log(result);
    10. class GenercNumber<T> {
    11. zeroValue: T | undefined;
    12. add: (x: T, y: T) => void | undefined;
    13. }
    14. const myGenericNumber = new GenercNumber<number>();
    15. myGenericNumber.zeroValue = 0;
    16. myGenericNumber.add = function (x, y) {
    17. return x + y;
    18. };
    19. // 泛型是想函数重载
    20. function getData<T>(value: T): T {
    21. return value;
    22. }
    23. getData<number>(1212);
    24. getData<string>("1212");
    25. // 泛型 接口
    26. interface ConfigFn {
    27. <T>(value: T): void;
    28. }
    29. const getData2: ConfigFn = function <T>(value: T): void {
    30. console.log(value);
    31. };
    32. getData2<number>(2);
    33. getData2<string>("1212");
    34. // 动态泛型
    35. interface Bookmarks {
    36. msg: string;
    37. }
    38. class BookmarksServers<T extends Bookmarks> {
    39. items: T[] = [];
    40. }
    41. class BookmarksServers2<T extends Bookmarks = Bookmarks> {
    42. items: T[] = [];
    43. }
    44. const s = new BookmarksServers2();
    45. // items = [
    46. // {
    47. // msg: "223223",
    48. // },
    49. // ];
    50. let err1: readonly Set<number>;
    51. let err2: readonly Array<number>;
    52. let ok1: readonly boolean[];
    53. let ok2: readonly [number, string];