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

TypeScript开发实战

共47讲 · 约450分钟
2993
免费
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 | 结束语
本节摘要

精选留言(7)

  • 2019-10-03
    当一个类型Y可以被赋值给另一个类型X时,可以说类型X兼容类型Y
    1.接口
    成员少的可以兼容成员多的
    2.函数
    1)个数
        多的可以兼容少的
                      固有参数 剩余参数 可选参数
    可选参数 不兼容 不兼容
    剩余参数 兼容 兼容
    固有参数 兼容 兼容
    2)参数类型
    多的可以兼容少的
    3)函数返回值
    少的可以兼容多的
    4)函数重载
    目标函数参数个数多于或者等于源函数参数个数
    3.枚举
    数字和枚举可以相互兼容,枚举与枚举间不兼容
    4.类
    类的构造函数和静态成员不参与比较,当类中有私有成员时,两个类不兼容,类与子类可以
    5.泛型
    1)泛型接口
    在两个泛型参数只有类型不相同时,只有在泛型参数使用时才影响
    2)泛型函数
    展开
    1
  • 2019-08-19
    老师,我没有关闭strictFunctionTypes,b=a和b=c 也不报错啊!

    作者回复: vscode 有时候是会出现这样的问题,我也遇到过,重启一下就正常了

    1
  • 2019-11-18
    时间进度1:53 左右,应该是一个口误:

    “x是可以赋值给y的,但是y不能赋值给x”

    但是代码上显示 `x=y` 的时候没有问题,而`y=x`是有问题的。

    所以应该是:

    “y是可以赋值给x的,但是x不能赋值给y”
    展开
  • 2019-11-16
    1.48
    x=y
    课程说,这是x赋值给y?
    这不是将t赋值给x吗?
    怎么说?
    1
  • 2019-11-12
    最后两个泛型函数 是一样的吧,只是型参 不一样!
    1
  • 2019-08-19
    - 当一个类型 Y 可以被赋值给另一个类型 X 时,我们就可以说类型 X 兼容类型 Y;

    ```
      x 兼容 y: x(目标类型) = Y(源类型)

    interface X {
        a: any,
        b: any
    }

    interface Y {
        a: any,
        b: any,
        c: any
    }
    let x: X = {a: q, b: 2}
    let y: Y = {a: q, b: 2, c: 3}
    x = y
    // y = x 报错
    结论1: - 接口之间相互赋值的时候,成员少的会兼容成员多的
    ---------------------------------------------------------
    interface Point3D {
        x: number,
        y: number,
        z: number
    }

    interface Point2D {
        x: number,
        y: number
    }

    let p3d = (point: Point3D) => {}
    let p2d = (point: Point2D) => {}
    p3d = p2d
    结论2: // p3d兼容p2d,成员个数多的兼容成员个数少的,与之前接口兼容性正好相反;
    ------------------------------------------------------
    老师,在10分28秒的时候说,总结一下,参数多的会兼容参数少的,那与结论一是不是相矛盾了?
    展开

    作者回复: 不矛盾,结论1是接口之间的兼容性判断,结论2是函数之间的兼容性判断,这是两回事。

    1
  • 2019-08-03
    课程中有一句结论:父类和子类的实例是可以完全兼容的。
    这个结论不严谨,可以在子类中增加一个属性调试下。课程中的子类没有新的属性,所以得出上面的结论。如果子类中增加了新的属性,结论可能有点小问题。。

    作者回复: 其实前面提到了,这个结论需要一个前提,就是实例要具有相同的成员,也就是要比较结构。子类加了一个属性,结构就不一致了,自然不兼容。