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

全部留言(21)

  • 最新
  • 精选
极客时间
1、接口约束对象 函数 类的结构 2、对象的接口如何定义 3、关键字 interface 4、作用 :规范对象的属性 属性的类型 属性值的类型 5、类型断言 用as 或者<>的形式 ,后者在react中使用会出问题 6、可选属性 通过?来设置 7、只读属性 通过readonly 来设置 8、当不确定接口中属性个数时需要使用 索引签名 9、索引签名包括字符串索引签名和数字索引签名 10、当接口中定义了一个索引后,例如设置了 【x:string】= string,就不能设置y:number了。 因为设置了【x:string】= string相当于这个接口的字符串索引返回值都是字符串,而y:number违背这一原则,冲突了。反过来 如果定义了【x:string】=Number, 就不能设置 y:string了。 11、 可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。 因为 数字索引或转化为字符串索引,而转化的这部分索引对应的值的类型范围 超过了 字符串索引类型的范围,就会报错,相当于超出范围。 笔记加个人理解,万望老师指点纠正

作者回复: 给你点赞

2019-07-19
31
曾小贤
数字索引的类型接口能理解,比如定义成[x:number]:string,但是[x:string]:string的实际类型该是什么呢?这块没理解,示例里的NAMES 它的真实值该是长什么样的?

作者回复: interface Names { [x: string]: string; } let names: Names = { xiaoming: "", xiaohong: "" }

2019-07-18
10
Mokc
请问下老师,在用类型断言绕过类型检查中,为什么data只有一个List对象也会报错呢?是因为必须是一个数组吗? render({ data:[ {id:1,name:'A',sex:'male'}, ] }as Result); // 为什么只写一行也会报错 render({ data:[ {id:1,name:'A',sex:'male'}, {id:2,name:'B'} ] }as Result); // 这样就不报错了

作者回复: 这个问题比较奇怪,好像数组中有一个元素符合List定义就通过了检查。原因暂时未知。 两个解决方案: 1)用字符串索引签名 2)最后一行 as unknown as Result

2019-07-24
6
GitHubGanKai
请问一下老师,我在ant-desgin-react 中看见这个 export interface ActionButtonProps { type?: ButtonType; actionFn?: (...args: any[]) => any | PromiseLike<any>; closeModal: Function; autoFocus?: boolean; buttonProps?: NativeButtonProps; } 请问:actionFn?: (...args: any[]) => any | PromiseLike<any>; 中的PromiseLike<any>是什么意思?

作者回复: 你可以按住ctrl,点击PromiseLike看它的定义,它是给resolve或reject添加回调的函数,返回一个Promise

2019-11-07
2
kgdmhny
老师,请问一下,我这边的环境 '05.datatype.ts' 与 ‘07-08.interface.ts’ 文件里的变量定义有重复冲突的报错。 例如: Cannot redeclare block-scoped variable 'add' .ts(2451) 05.datatype.ts(18, 5): 'add' was also declared here. 请问一下怎么解决这个问题?是因为我的环境里某个编译项配制项没有配吗?

作者回复: 这是正常的,这些代码都是代码片段,为了演示方便,没有考虑重名问题。如果要一起运行,你可以把它们都定义成模块,或者修改一下变量名。

2019-07-28
2
2
WL
对于字符串索引签名我不是很理解, 请问一下老师, [x: string]: any; 的意思是用字符串取匹配list的实例对象的属性名, 如果有属性名与这个字符串匹配的name就返回属性的值吗?

作者回复: interface Names { [x: string]: any } let names: Names 字符串索引签名有两层含义: 1)names 可以有任意多个属性 2)names 可以用字符串索引,既 names['xxx'],或 names.xxx(也可以用数字索引,names[number],数字会被转换成字符串) 如: names = { 0: 0, a: 'a' } 注意,并不涉及任何字符串匹配问题。

2019-07-21
2
2
潮汐
老师,如果我定义一个interface,里面就是空,然后实际的变量就可以有各种属性,也不报错,是不是不建议这样的空接口的写法?

作者回复: 这种定义符合类型兼容性,也就是变量可以具有接口定义外的额外属性,只不过这个接口是空的。 空接口也有一定的作用,要看场景,

2020-08-01
1
away
interface Names { [index: string]: string; } let nam: Names = ['a3', '3'] 这个报错要怎样写呢? Type 'string[]' is not assignable to type 'Names'. Index signature is missing in type 'string[]'

作者回复: Names是字符串索引类型,不能赋值为数组(数字索引),赋值一个对象就行了。

2019-09-28
3
1
Geek_e8b469
Render 函数穿对象字面量 我用了as Result断言还报错 不可与类型比较

作者回复: 最好提供一下代码

2020-10-16
Thunder
browser的vscode插件叫啥?

作者回复: 我用的是Mac的分屏功能

2020-05-03
收起评论