TypeScript 开发实战
梁宵
搜狗营销事业部高级架构师
34174 人已学习
新⼈⾸单¥59
课程目录
已完结/共 47 讲
TypeScript 开发实战
登录|注册
留言
26
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 47 | 结课测试&结束语
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 | 结课测试&结束语
本节摘要

你好,我是梁宵。

到这里,《TypeScript 开发实战》这门课程就全部结束了。我给你准备了一个结课小测试,来帮助你检验自己的学习效果。

这套测试题共有 20 道题目,12 道单选题,8 道多选题,满分 100 分,系统自动评分。

还等什么,点击下面按钮开始测试吧!

另外,一路走来,我非常想听听你对我和这个课程的看法,把你的反馈和建议写下来吧。

登录 后留言

全部留言(26)

  • 最新
  • 精选
大雄不爱吃肉
很适合新手,入门到实践,希望老师继续出一门课程,不管啥课都行

作者回复: 感谢支持!

2020-05-11
8
嘿喂狗
终于看完了所有的课程,比起之前自己啃文档。很多地方真的有融会贯通的感觉,很多地方值得反复观看。等以后遇到了还能再回来复习。谢谢老师。老师讲的很好,希望老师以后能出更多的课程,再来跟老师一起学习。

作者回复: 很高兴你能有收获,我在和大家的讨论中也在一起进步。

2020-06-15
4
Hy
interface IProps { obj: { name: string } } const A = ({obj = {}}: IProps) => <div>{obj.name}</div> 你好,麻烦问一下,像这种场景,参数是对象的时候通常为了兼容性会赋予一个默认值空对象,但是这样ts会提示.name不存在{}上,我想知道有没有优雅一点的解决方式

作者回复: 首先,代码里允许 obj 为{}其实就已经与接口定义相矛盾了,这里 TS 帮我们回避了 Cannot read property 'name' of undefined 的报错风险。 可以有两种方案,供参考: 1)可将 name 声明为可选: name?: string 但这可能不是最佳方案,如果 obj 加了其他属性就难以维护 2)利用 in 类型保护 const A = ({obj}: IProps) => { let name: any return name in obj ? obj.name : null } 代码里就要体现出来对边界情况的处理

2020-04-27
2
strive0212
老师有没有用ts写的好一点的RN的项目地址,我参考参考

作者回复: react-native-ui-kitten

2019-11-21
2
strive0212
fadeAnim : new Animated.Value(80) 老师这个fadeAnim改定义成什么类型

作者回复: 你是指RN中的Animated吧?有段时间没有使用过了,查了一下,声明文件还不支持,社区有一些此问题的讨论,希望能帮到你: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/12202

2019-11-17
1
💪
9.28号,在古北水镇看见你了

作者回复: 哈哈 好巧

2019-09-29
3
1
刘小宅
老师我在项目中添加了ts类型检查, 碰到我使用table 标签并有属性cellpadding 发现报错代码如下:<div className="app-store-table"> <table cellpadding="0" cellspacing="0"> <tr> <th>賬號</th> <th>密碼</th> </tr> <tr v-for="(item, index) in username"> <td></td> <td></td> </tr> </table> </div> 报错如下: (property) JSX.IntrinsicElements.table: React.DetailedHTMLProps<React.TableHTMLAttributes<HTMLTableElement>, HTMLTableElement> 不能将类型“{ children: Element[]; cellpadding: string; cellspacing: string; }”分配给类型“DetailedHTMLProps<TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>”。 类型“DetailedHTMLProps<TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>”上不存在属性“cellpadding” 疑问: 我该如何解决这个问题

作者回复: 拼写错误,是cellPadding、cellSpacing

2020-01-15
陆 慢 慢
老师,提个问题: 用ts开发了一个纯js的库,打包成umd库发布npm的时候,是用webpack还是tsc? 如果用webpack打包,是不是需要自己写声明文件; 如果用tsc直接打包生成module: umd的库,在js文件中引用会报 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted 这个错误。

作者回复: 建议用webpack打包,声明文件可以通过declaration 选项生成,但最好还是在人工检查一下。

2020-01-10
爱乐之城
老师好,我碰到一个项目中写 typescript 的问题,想请教下。我有一个组件 ItemForm,它可以在 AddForm,ModifyForm 组件中复用,这个组件接收两个参数 type(比如 add/modify),和 item。我现在的问题是,如果是 AddForm,就只需要传 type;ModifyForm 就传 type 和 item。我的 interface 该怎么写呢。我知道写成 { type: any; item?: any } 是可行的,可是这样的话我在 ModifyForm 中也没法提示必须传 item 参数了,在 ItemForm 中还要处理一堆 if (this.props.item) {} 的判断,要不然 TS 会报 item 可能是 undefined,如果它能知道在 type=modify 的时候 item 肯定存在就好了。 有更好的定义写法吗?谢谢。

作者回复: 可以把FormItem用高阶组件包装一下,增加一个item属性,给ModifyForm使用,type属性也不需要了。比如: const FormItem = () => <input /> interface Item { value: string } function attachItem<P>(WrappedComponent: React.ComponentType<P>) { return class extends Component<P & Item> { render() { const { value, ...props } = this.props; return value ? <input value ={value} /> : <WrappedComponent { ...props as P } />; } } } const FormItemWrapped = attachItem(FormItem); class AddForm extends Component { render() { return <FormItem /> } } class ModifyForm extends Component { render() { return <FormItemWrapped value='xxx' /> } }

2019-11-15
3
droden
老师 把咱们上课的的源码下载下来了 打开里面竟然有报错 我想知道这种问题怎么解决,这个引发的原因是什么?是不是跟IDE的配置有关系?望赐教 下面试代码合报错信息提示 代码: ~~~ // 函数 let add = (x: number, y: number) => x + y let compute: (x: number, y: number) => number compute = (a, b) => a + b ~~~ 报错提示: ~~~ let add: (x: number, y: number) => number 无法重新声明块范围变量“add”。ts(2451) math.ts(1, 10): 'add' was also declared here. ~~~

作者回复: ts-base这个工程包含很多节课的代码,报错都是变量重名问题。先只保留index.ts,要测试哪段代码就单独引入吧。

2019-10-11
2
收起评论