【TypeScript】004
【TypeScript】004
、类型推论 如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。
什么是类型推论以下代码虽然没有指定类型,但是会在编译的时候报错:代码语言:javascript代码运行次数:0运行复制let myFavoriteumber = 'seven'; // 声明的时候赋值为字符串
【TypeScript】004
、类型推论
如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。
什么是类型推论
以下代码虽然没有指定类型,但是会在编译的时候报错:
代码语言:javascript代码运行次数:0运行复制let myFavoriteumber = 'seven'; // 声明的时候赋值为字符串,推断为字符串类型
myFavoriteumber = 7; // 将一个数值赋值给一个字符串类型,导致报错!
// (2,1): error TS222: Type 'number' is not assignable to type 'string'.
事实上,它等价于:
```typescript
let myFavoriteumber: string = 'seven';
myFavoriteumber = 7;
// (2,1): error TS222: Type 'number' is not assignable to type 'string'.
TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论。
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any
类型而完全不被类型检查:
let myFavoriteumber; // 推断为任意值!
myFavoriteumber = 'seven';
myFavoriteumber = 7;
4、联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种。
简单的例子
代码语言:javascript代码运行次数:0运行复制let myFavoriteumber: string | number; // 这就意味着可以是字符串,也可以是数值!
// 所以可以赋值为字符串,也可以赋值为数值!
myFavoriteumber = 'seven';
myFavoriteumber = 7;
// 下面就会报错了
myFavoriteumber = true;
// (2,1): error TS222: Type 'boolean' is not assignable to type 'string | number'.
// Type 'boolean' is not assignable to type 'number'.
联合类型使用 |
分隔每个类型。
这里的 let myFavoriteumber: string | number
的含义是,允许 myFavoriteumber
的类型是 string
或者 number
,但是不能是其他类型。
访问联合类型的属性或方法
当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法:
代码语言:javascript代码运行次数:0运行复制function getLength(something: string | number): number {
return something.length;
}
// (2,22): error TS29: Property 'length' does not exist on type 'string | number'.
// Property 'length' does not exist on type 'number'.
上例中,length
不是 string
和 number
的共有属性,所以会报错。
访问 string
和 number
的共有属性是没问题的:
function getString(something: string | number): string {
return ();
}
联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型:
代码语言:javascript代码运行次数:0运行复制let myFavoriteumber: string | number;
myFavoriteumber = 'seven';
cole.log(myFavoriteumber.length); // 5,这里推论为字符串,因此有length!
myFavoriteumber = 7;
cole.log(myFavoriteumber.length); // 编译时报错,这里推论为数值,因此报错!
// (5,0): error TS29: Property 'length' does not exist on type 'number'.
上例中,第二行的 myFavoriteumber
被推断成了 string
,访问它的 length
属性不会报错。
而第四行的 myFavoriteumber
被推断成了 number
,访问它的 length
属性时就报错了。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-23 08:36:58
推荐阅读
留言与评论(共有 9 条评论) |
本站网友 星叶瑜憬湾 | 22分钟前 发表 |
什么是类型推论以下代码虽然没有指定类型 | |
本站网友 同性恋男 | 27分钟前 发表 |
error TS222 | |
本站网友 我睡不着的时候会不会有人陪着我 | 29分钟前 发表 |
string | number; // 这就意味着可以是字符串 | |
本站网友 优化大师破解版 | 29分钟前 发表 |
string = 'seven'; myFavoriteumber = 7; // (2 | |
本站网友 刘政 | 0秒前 发表 |
访问 string 和 number 的共有属性是没问题的:代码语言:javascript代码运行次数:0运行复制function getString(something | |
本站网友 浦东八佰伴 | 10分钟前 发表 |
string | number; // 这就意味着可以是字符串 | |
本站网友 海尔集团董事长 | 25分钟前 发表 |
这里推论为字符串 | |
本站网友 坦克世界灯泡 | 6分钟前 发表 |
访问它的 length 属性不会报错 |