下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 14 | 泛型(2):泛型类与泛型约束
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

TypeScript开发实战

共47讲 · 约450分钟
2974
免费
01 | 重塑“类型思维”
免费
02 | 类型基础(1):强类型与...
免费
03 | 类型基础(2):动态类型...
免费
04 | 编写你的第一个TypeScrip...
免费
05 | 基本类型
06 | 枚举类型
07 | 接口(1):对象类型接口
08 | 接口(2):函数类型接口
09 | 函数相关知识点梳理
10 | 类(1):继承和成员修饰...
11 | 类(2):抽象类与多态
12 | 类与接口的关系
13 | 泛型(1):泛型函数与泛...
14 | 泛型(2):泛型类与泛型...
15 | 类型检查机制(1):类型...
16 | 类型检查机制(2):类型...
17 | 类型检查机制(3):类型...
18 | 高级类型(1):交叉类型...
19 | 高级类型(2):索引类型
20 | 高级类型(3):映射类型
21 | 高级类型(4):条件类型
22 | ES6与CommonJS的模块系统
23 | 使用命名空间
24 | 理解声明合并
25 | 如何编写声明文件
26 | 配置tsconfig.json(1)...
27 | 配置tsconfig.json(2)...
28 | 配置tsconfig.json(3)...
29 | 编译工具:从ts-loader到...
30 | 代码检查工具:从TSLint到...
31 | 使用Jest进行单元测试
32 | 创建项目
33 | 组件与类型(1):函数组...
34 | 组件与类型(2):高阶组...
35 | 事件处理与数据请求
36 | 列表渲染与路由
37 | Redux与类型
38 | 搭建服务端开发环境
39 | 列表的CRUD
40 | 导出Excel
41 | 搭建Vue开发环境
42 | 组件封装
43 | 组件发布
44 | 共存策略
45 | 宽松策略
46 | 严格策略
47 | 结束语
本节摘要

精选留言(4)

  • 2019-07-26
    泛型的好处
    1.函数和类可以支持多种类型,增加的程序的可扩展性
    2.不必写多条函数重载,联合类型声明,增强代码的可读性
    3.灵活控制类型之间的约束

    总结:
    泛型不仅可以保持类型的一致性,又不失程序的灵活性,同时也可以通过泛型约束,控制类型之间的约束。从代码的上来看,可读性,简洁性,远优于函数重载,联合类型声明以及 any 类型的声明。
    展开
    2
  • 我这个问题怎么处理
    interface Text {
        <T extends object, K extends keyof T>(o: T, n: K): T[K];
    }
     function test<T extends object, K extends keyof T>(o: T, n: K): T[K] {
        return o[n];
    }

    let test1: Text = test
    test1({a:1},'a')


    // Error:(8, 5) TS2740: Type '<T extends object, K extends keyof T>(o: T, n: K) => T[K]' is missing the following properties from type 'Text': assignedSlot, wholeText, splitText, data, and 62 more.
    展开

    作者回复: Text接口在 lib.dom.d.ts 中已被预定义,换个名字就可以了

  • 2019-08-31
    class Log<T> {
        // Static members cannot reference class type parameters.
        // static run(value: T) {
        run(value: T) {
            console.log(value)
            return value
        }
    }

    let log1 = new Log<number>()
    log1.run(1)
    let log2 = new Log<any>();
    let obj = {a:1}
    log2.run(obj)
    log2.run('2')
    log2.run(2.15)

    在我的环境下,默认 new Log() , run() 只接受 string 类型的值, 必须显示声明为 any ,才能接受任意值。
    展开
    1
  • 2019-08-29
    建议老师基本类型了之后能够能个课堂小练习,或者弄个应用,这样能够巩固学习的知识,要不然基本上学了理论知识很容易忘。