TypeScript 开发实战
梁宵
搜狗营销事业部高级架构师
34174 人已学习
新⼈⾸单¥59
课程目录
已完结/共 47 讲
TypeScript 开发实战
登录|注册
留言
7
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 17 | 类型检查机制(3):类型保护
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 重塑“类型思维”
02 | 类型基础(1):强类型与弱类型
03 | 类型基础(2):动态类型与静态类型
04 | 编写你的第一个TypeScript程序
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到Babel
30 | 代码检查工具:从TSLint到ESLint
31 | 使用Jest进行单元测试
32 | 创建项目
33 | 组件与类型(1):函数组件与类组件
34 | 组件与类型(2):高阶组件与Hooks
35 | 事件处理与数据请求
36 | 列表渲染与路由
37 | Redux与类型
38 | 搭建服务端开发环境
39 | 列表的CRUD
40 | 导出Excel
41 | 搭建Vue开发环境
42 | 组件封装
43 | 组件发布
44 | 共存策略
45 | 宽松策略
46 | 严格策略
47 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(7)

  • 最新
  • 精选
陈四丰
既然有instanceof和typeof了(个人觉得只有instanceof就够了),为什么还需要其他两种实现方法呢?统一用一种最简单的方法能提高可读性。或者说其他方法有特殊存在的意义?

作者回复: 不同的判断方法有不同的使用场景: typeof:判断一个变量的类型 instanceof:判断一个实例是否属于某个类 in:判断一个属性是否属于某个对象 类型保护函数:某些判断可能不是一条语句能够搞定的,需要更多复杂的逻辑,适合封装到一个函数内

2019-08-28
2
30
KaKaKa
在编写 if ( (lang as Java).helloJava ) 时,一直报红:This condition will always return true since the function is always defined. Did you mean to call it instead? 请问下是开了什么配置吗

作者回复: 这是3.7后加入的校验,改成 if(!!(lang as Java).helloJava) 即可。

2020-06-09
1
工号996
使用in时遇到的问题 enum Type { Strong, Week } class Java { helleJava() { console.log('Hello Java') } java: any } class JavaScript { helleJavaScript() { console.log('Hello JavaScript') } javascript: any } function getLang(type: Type) { let lang = type === Type.Strong ? new Java() : new JavaScript() if('java' in Java) { lang.helleJava() // 错误提示:类型“Java | JavaScript”上不存在属性“helleJava”。 } else { lang.helleJavaScript() // 错误提示:类型“Java | JavaScript”上不存在属性“helleJavaScript”。 } return lang }

作者回复: if('java' in lang)

2021-02-17
hao-kuai
1、ts的所谓断言,从使用效果来看就是强制类型转换,功能就是通过语法检查 2、类型保护函数这个定义,看起来是断言的复杂逻辑封装 3、typeof、instanceof、in这个三个 JavaScript 本来就有,断言才是 ts 新增的(个人觉得标注清楚更严谨),(就像 陈四丰 同学说的那样,instanceof 就够用了),从功能上看断言并没有提供不可替代的功能,那么极端一点为啥要花精力学这个东西? 4、如果说 ts 的断言是JavaScript(typeof、instanceof、in)的语法糖,直接标注就好了,降低理解成本
2020-08-27
1
阳仔
类型位词,mark
2019-10-16
1
1
man-moonth
感觉类型保护的本质就是类型推断,尤其是对于高级的类型如视频举例的class,TS通过鸭子定律和排除法严格地推断了类型。第四种函数判断法(`lang is Java`)真是太棒了,不仅仅是class,对于type和interface定义的结构也适用,这种方法适合用在操作未知的对象,例如后端返回的数据。
2020-05-24
~鸵鸟蛋~
使用in判断时,else里面会提示“lang.helloJavaScript is not a function”的错误,这是怎么回事
2019-12-29
3
收起评论