1. /**
    2. * 在定义函数或是类时,如果遇到类型不明确的可以使用泛型
    3. *
    4. */
    5. function fn<T>(a: T): T {
    6. return a
    7. }
    8. //可以直接调用具有泛型的函数
    9. let result = fn(10) //不指定泛型:TS可以自动对类型进行判断
    10. let result2 = fn<string>('hello') //指定泛型
    11. //泛型可以同时指定多个
    12. function fn2<T, K>(a: T, b: K): T {
    13. console.log(b)
    14. return a
    15. }
    16. fn2<number, string>(12, 'a')
    17. interface Inter {
    18. length: number
    19. }
    20. //T extends Inter 表示泛型T必须是Inter的子类
    21. function fn3<T extends Inter>(a: T): number {
    22. return a.length
    23. }
    24. class MyClass<T>{
    25. name: T
    26. constructor(name: T) {
    27. this.name = name
    28. }
    29. }
    30. const ms = new MyClass<string>('zz')