TypeScript:3、类型声明与类型推断

类型声明与类型推断

TypeScript 最重要的能力之一,就是通过类型信息帮助我们检查代码。类型信息可以手动声明,也可以由编译器自动推断。

一、类型声明的基本语法

变量、参数和返回值都可以添加类型:

ts 复制代码
let variable: type;

let variable: type = value;

function fn(parameter: type): returnType {
  // ...
}

实际示例:

ts 复制代码
let username: string = '孙悟空';
let age: number = 18;

function add(a: number, b: number): number {
  return a + b;
}

二、变量类型检查

声明为 number 的变量只能保存数字:

ts 复制代码
let count: number = 10;

count = 20;

// 编译错误:不能把 string 赋值给 number
// count = '20';

类型声明的作用不是把值转换成某种类型,而是告诉编译器这个变量应该保存什么类型的值。

三、自动类型推断

当变量声明和初始化同时完成时,TypeScript 通常可以根据初始值推断类型:

ts 复制代码
let message = 'hello';
let total = 100;
let completed = false;

编译器会推断出:

text 复制代码
message   → string
total     → number
completed → boolean

后续赋值仍然会受到推断类型的限制:

ts 复制代码
let message = 'hello';

message = 'world';

// 编译错误:message 被推断为 string
// message = 100;

四、什么时候应该显式声明类型

以下情况建议显式写出类型:

  1. 变量没有初始值。
  2. 函数参数需要明确约束。
  3. 函数返回值对外提供服务。
  4. 类型比较复杂或单靠初始值无法表达意图。
  5. 希望让代码阅读者快速了解数据结构。
ts 复制代码
let userName: string;

function formatPrice(price: number): string {
  return '¥' + price.toFixed(2);
}

五、函数参数和返回值

1. 参数类型

ts 复制代码
function greet(name: string): string {
  return 'Hello, ' + name;
}

greet('Tom');

// 编译错误:参数类型不匹配
// greet(100);

2. 返回值类型

ts 复制代码
function multiply(a: number, b: number): number {
  return a * b;
}

如果函数内部的返回值足够明确,TypeScript 也可以推断返回类型:

ts 复制代码
function multiply(a: number, b: number) {
  return a * b;
}

在公共函数、复杂函数或团队项目中,显式写出返回值类型通常更容易维护。

六、let 和 const 的类型特点

ts 复制代码
let mutableValue = 'hello';
mutableValue = 'world';

const fixedValue = 'hello';

let 声明的变量可以重新赋值,const 声明的变量不能重新赋值。实际项目中,变量不会重新赋值时优先使用 const

七、类型声明和类型推断如何选择

场景 建议
初始值简单且类型明显 使用类型推断
函数参数 显式声明
函数返回值复杂或对外使用 建议显式声明
没有初始值 显式声明
类型表达业务规则 显式声明

示例:

ts 复制代码
const appName = '后台管理系统';

function getUserId(userId: number): number {
  return userId;
}

八、常见错误

错误一:把类型声明写成赋值

ts 复制代码
// 错误写法
// let age = number;

// 正确写法
let age: number = 18;

错误二:以为类型声明会转换数据

ts 复制代码
const input = '18';

// 类型断言不会把字符串转换为数字
const value = input as unknown as number;

真正需要转换时,应该使用运行时转换方法:

ts 复制代码
const value = Number(input);

错误三:为了省事给所有变量使用 any

any 会削弱类型检查。类型确实未知时,优先考虑 unknown,并在使用前进行类型判断。

九、本章小结

  • 类型声明使用 变量: 类型 语法。
  • 函数参数和返回值可以分别声明类型。
  • 初始化时,TypeScript 通常可以自动推断类型。
  • 类型声明用于检查,不负责运行时数据转换。
  • 能推断时可以少写类型,公共接口和业务边界建议明确声明。
相关推荐
与自己和解7413 分钟前
使用ssh实现 VScode 直连 ubuntu
vscode·ubuntu·ssh
Tanjia_kiki19 分钟前
谷歌浏览器中F12编辑并重发请求
开发语言·前端·javascript
honkun628 分钟前
vue 表格组件 vxe-table 实现拖拽列字段自动生成透视表汇总
前端·javascript·vue.js
IMPYLH1 小时前
HTML 的 <p> 元素
前端·javascript·html
leoZ2311 小时前
第 4 篇:布局骨架——页面壳、栅格、卡片
前端·javascript·vue.js·opencv·计算机视觉·数据挖掘·语音识别
何以解忧,唯有..1 小时前
Vue 3 模板语法详解:从插值到指令的完整指南
前端·javascript·vue.js
2601_962299881 小时前
Linux下运行Python脚本
linux·python·ubuntu·脚本·命令
EasyGBS1 小时前
从接入到稳定播放:无插件直播H5视频流媒体播放器EasyPlayer.js如何撑起Web端流媒体
开发语言·前端·javascript
Carl_奕然1 小时前
【智能体】Agent的四种设计模式之:React(2026最新版)
javascript·人工智能·python·react.js·设计模式·语言模型