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

全部留言(9)

  • 最新
  • 精选
北冥有人
老师,请教个问题。 const str = "abc"; // const str: "abc" const obj = { // const obj: {str: string} str: "abc" } 以上两种变量定义方式,为什么 str 的 type 是 "abc" ,而不是 string 而 obj 里的 str type 是 string 在使用中,某些地方,需要 确认 type 是 "abc",比如下面,就会报错:TS2322: Type 'string' is not assignable to type '"abc"'. const needAbc: typeof str = obj.str; 这时有三个方案 - needAbc 类型改为 str,降低约束条件。不严谨。 - 断言 as 下。很麻烦。 - 单层 obj 可以使用 enum。 如果 obj 是嵌套对象,没法定义枚举。 比如: const obj2 = { type: { subType: { abc: "abc" } } }; const needAbc: typeof str = obj2.type.subType.abc; // error 请问这种场景,该怎么定义,既方便又严谨?

作者回复: 1. 为什么 const str 的类型是 'abc'? 因为 str 是用 const 定义的,不可修改,是一个字符串字面量类型(string literal type);如果用 let 定义,类型就是 string 了 2. 为什么 const obj 里 str 的 type 是 string? obj 是地址引用,地址不可改变,但 str 的值是可以改变的,所以是 string 类型 3. 如何通过 const needAbc: typeof str = obj.str 类型检查? 除了你提到的3种方法,推荐使用常量断言(const assertion) const obj = { str: 'abc' } as const 这种方式会将对象的每个属性(支持深层)定义为只读

2020-12-20
7
.Alter
老师,我在最新版本的vscode中,输入window.onkeydown = (event) => { console.log('onkeydown')},编辑器会提示参数“event”隐式具有“any”类型,而没有进行上下文推断。 但是在之前的一些版本里就可以正常推断,请问这个是哪里的问题呢?

作者回复: 嗯,这个提示是之前没有的,加上 KeyboardEvent 类型就可以了。

2019-09-16
2
5
工号996
看见这样的写法 const aa: {}[] = [1, 2, {}, []] 没有报错,{}[]表示的到底是什么数组? const aa: {}[] = [1, 2, {}, [], null] 这样写后,就报错了

作者回复: 关键问题是了解“{}”在TS中是什么类型,通过下面赋值可以知道: let a: {}; a = {p: 0}; // OK a = []; // OK a = 1; // OK a = "s"; // OK a = false; // OK a = null; // Error a = undefined; // Error 此外,还有object和Object,也需要注意: var b: object; b = {p: 0}; // OK b = []; // OK b = 1; // Error b = "s"; // Error b = false; // Error b = null; // Error b = undefined; // Error var c: Object; c = {p: 0}; // OK c = []; // OK c = 1; // OK c = "s"; // OK c = false; // OK c = null; // Error c = undefined; // Error 这些类型比较特殊,记住就好。

2020-07-05
4
空间
请问如果有一个接口A1 那么<A1>和<T extends A1>有什么区别?

作者回复: T extends A1 表示,A1 = T 为 true(类型兼容),T 至少要具备 A1 的所有属性

2021-04-19
1
靑羗
let foo = {} as Foo let foo = <Foo>{} let foo: Foo = { bar: 1 } 请问老师 这三种使用方式 第二种方式和其他两种有什么区别呢?

作者回复: 第二种和第一种一样,但是不能用在 React 中,建议使用第三种。

2019-08-03
Hurry
类型推断 不需要指定变量的类型(函数的返回值类型),Typescript 可以根据某些规则自动为其推断一个类型。 1.基础类型推断 2.最佳通用类型推断 3.上下文类型推断 - 前两者都是从右往左的推断,根据值去推断, 例如 let a = 1 // a 被推断的类型是 number - 最佳通用类型推断 例如 let b = [1, 'a'] // b 的最佳通用类型 (string | number)[] - 根据上下类型推断 例如 window.onkeydown = (event) => {} // 推断 event 为 KeyboardEvent - 当类型推断不符合你的要求的时候,你可以使用类型断言 as,但是类型断言不能乱用,要对自己上下文充分了解
2019-07-27
3
猿工匠
发型换了
2022-06-19
1
百炼钢
/** * 类型推断 * 从右向左 */ let a = 1 let b = [1] let c = (x = 1) => x + 1 /** * 类型推断 * 从左向右 (根据上下文) */ window.onkeydown = (event) => {} /** * 类型断言 */ interface Foo { bar: number } let foo = {} as Foo foo.bar = 1 /** * 以上使用`as`的方式,不会提示是否缺失定义`bar`属性, * 最好的方式是使用下面代码,在定义时就指明类型 * * Property 'bar' is missing in type '{}' but required in type 'Foo'. */ let foo02 : Foo = { bar: 1 }
2019-08-31
1
马蹄矩阵
核心的函数重载,范型的推断, Extends,Infer的核心概念都没有讲
2022-05-02
收起评论