您现在的位置是:首页 > 编程 > 

【TypeScript】004

2025-07-27 15:23:40
【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 类型而完全不被类型检查

代码语言:javascript代码运行次数:0运行复制
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 不是 stringnumber 的共有属性,所以会报错。

访问 stringnumber 的共有属性是没问题的:

代码语言:javascript代码运行次数:0运行复制
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 属性时就报错了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent 删除编译字符串typescriptstring变量

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1197094.html

相关标签:无
上传时间: 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 属性不会报错