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

全部留言(10)

  • 最新
  • 精选
waht
大佬!求帮助!现在我想要用ts约束一下,就是输入的函数类型和输出的是一样的,但是怎么写都报错,如下 export function onceFunction<T> (fn: T): T { let once = true const onceFunction: T = function (...a: unknown[]): unknown { if (once) { once = false if (fn instanceof Function) { return fn(...a) } } } return onceFunction } 不能将类型“(...a: unknown[]) => unknown”分配给类型“T”。 '(...a: unknown[]) => unknown' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint '{}'.ts(2322) 那要怎么写才能做到刚才想要的规则约束呢

作者回复: 需要注意两点: 1)函数的参数和返回值要区分别约束 2)onceFunction 返回的函数可能会返回 void 下面的实现请参考: function onceFunction<T extends any[], U>(fn: (...args: T) => U): (...args: T) => U | void { let once = true return (...args) => { if (once) { once = false if (fn instanceof Function) { return fn(...args) } } } }

2020-04-21
2
2
杨雷16601046650
我这个问题怎么处理 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-11-22
1
工号996
class Log<T> { run(value: T) { console.log(value) return value } } 泛型变量T定义在类后面,new实例化时,如果指定了T的值,此时便固定了value的类型。 如果Log类有多个方法,感觉泛型变量T定义在类后面就不适用了,是不是应该写在里面呀,这样的: class Log { run<T>(value: T) { console.log(value) return value } run2<D>(value: D) { console.log(value) return value } } const log = new Log() log.run<string>('1') log.run<number>(1) log.run2<number>(1)

作者回复: 仍然可以,这样写 class Log<T, D>

2021-02-15
Hurry
泛型的好处 1.函数和类可以支持多种类型,增加的程序的可扩展性 2.不必写多条函数重载,联合类型声明,增强代码的可读性 3.灵活控制类型之间的约束 总结: 泛型不仅可以保持类型的一致性,又不失程序的灵活性,同时也可以通过泛型约束,控制类型之间的约束。从代码的上来看,可读性,简洁性,远优于函数重载,联合类型声明以及 any 类型的声明。
2019-07-26
6
hao-kuai
视频中提到比联合和重载好,有点万金油的感觉,如果是这样为什么还有这二者的存在?还是说这三者本来就是为了解决不同的问题而设计的,仅仅在这里被比较了?
2020-08-26
1
hoops
老师「变色龙」这个形容太棒了,一针见血������
2020-08-23
1
Geek_lee
学到这里,基本也忘完了😂,讲的有点浅,每次都想问为什么。结果看完视频,我还需要去网上再搜索资料~
2023-03-09
HAYWAEL
静态成员不能引用类型参数 理解:因为静态成员是一个类所有实例共享的
2022-10-24
百炼钢
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 ,才能接受任意值。
2019-08-31
1
焱焱
建议老师基本类型了之后能够能个课堂小练习,或者弄个应用,这样能够巩固学习的知识,要不然基本上学了理论知识很容易忘。
2019-08-29
收起评论