交叉类型(&):可以理解为合并属性,而属性的类型取交集,一般取小类型
联合类型(|):可以理解为或,或者是A的属性,或者是B的属性,或者是咱两合一起的属性,属性的类型一般取大类型
联合类型(|):可以理解为或,或者是A的属性,或者是B的属性,或者是咱两合一起的属性,属性的类型一般取大类型
2024-02-26
关于映射类型和索引类型的定义有些问题,具体可参考官方文档:
1、索引类型:https://www.typescriptlang.org/docs/handbook/2/indexed-access-types.html
2、映射类型:https://www.typescriptlang.org/docs/handbook/2/mapped-types.html
1、索引类型:https://www.typescriptlang.org/docs/handbook/2/indexed-access-types.html
2、映射类型:https://www.typescriptlang.org/docs/handbook/2/mapped-types.html
2024-02-08
最新回答 / 瑜伽兔子
联合类型(`A | B`)和交叉类型(`A & B`)看似增加了类型复杂度,但在很多场景下,它们能**精准描述数据的“或”“且”关系**,反而会让类型逻辑更清晰、代码更安全。避开它们可能导致用 `any` 替代或重复定义类型,反而增加维护成本。下面结合具体场景举例说明:
### 一、联合类型(`A | B`):处理“或”关系的场景
联合类型的核心是“类型可以是多个选项中的一个”,适合描述**存在多种可能形态的数据或状态**。
#### 1. 状态管理:同一变量的不同状态(“成功/失败/加载...
2024-02-08
说明TypeScirpt是强类型时举的例子不恰当:对于动态类型编程语言,赋值时不声明类型,同一变量可以随时被赋值为不同类型,举的例子表现的仍然是TypeScript为静态类型;Python是动态类型,所以也能这么做,但它却是强类型,判断强弱类型的基准是会不会存在隐式类型转换:最典型的例子是JavaScript中string+number时,number会自动转换成string然后做字符串拼接;但是Python中不允许str+float;TypeScript中编译阶段允许string+number,实际类型转换是在JavaScript运行时,应当解释为运算符重载。
讲师回答 / 黑石
这是两种安全策略的问题,分为类型匹配和属性访问限制。类型匹配:在你的代码中,变量 c2 被定义为 Course2 类型,这是 EnglishCourse | MathCourse 的联合类型。变量 c2 的结构 { name: 'a', desc: 'abc' } 符合 EnglishCourse 接口的定义(因为 EnglishCourse 有 name 和 desc 两个属性),所以 TypeScript 认为这是一个有效的赋值。 接下来,关于为什么你不能直接访问 c2.desc:属性访...
2024-01-03