TypeScript参数限制技巧大全

【TypeScript】深入学习TypeScript函数 博主的TypeScript专栏正在慢慢的补充之中,赶快关注订阅,与博主一起进步吧!期待你的三连支持。 阅读详情

目录

1. 限制参数只能是某几个固定值(联合字面量类型)

2. 使用 enum 枚举来限制参数

3. 函数参数限制为固定键(keyof)

4. 限制参数只能是某些数组里的元素(as const + 联合推导)

5. 多参数时某些参数必须固定


1. 限制参数只能是某几个固定值(联合字面量类型)

最常见的写法就是 字面量联合类型:

function setStatus(status: "success" | "error" | "pending") {
  console.log("status:", status);
}

setStatus("success"); // ✅ 正确
setStatus("error");   // ✅ 正确
setStatus("pending"); // ✅ 正确
setStatus("failed");  // ❌ 报错,不在允许范围内

⚡️ 使用场景:枚举型参数(如状态、方向、主题等)。


2. 使用 enum 枚举来限制参数

enum Role {
  Admin = "admin",
  User = "user",
  Guest = "guest"
}

function login(role: Role) {
  console.log("role:", role);
}

login(Role.Admin); // ✅ 正确
login("admin");    // ❌ 报错,必须用枚举值

⚡️ 适合参数值比较多、需要复用时。


3. 函数参数限制为固定键(keyof)

如果参数是 对象的 key,可以用 keyof:

type User = {
  id: number;
  name: string;
  age: number;
};

function getUserProperty(user: User, key: keyof User) {
  return user[key];
}

const u: User = { id: 1, name: "Tom", age: 18 };

getUserProperty(u, "id");    // ✅
getUserProperty(u, "name");  // ✅
getUserProperty(u, "gender"); // ❌ 报错

⚡️ 适合在对象字段名范围内传参。


4. 限制参数只能是某些数组里的元素(as const + 联合推导)

const COLORS = ["red", "green", "blue"] as const;
type Color = typeof COLORS[number];

function setColor(c: Color) {
  console.log("color:", c);
}

setColor("red");    // ✅
setColor("yellow"); // ❌

⚡️ 适合参数选项可枚举,但想避免手写联合类型的情况。


5. 多参数时某些参数必须固定

可以通过 函数重载 或 条件类型 来实现:

function request(type: "GET", url: string): void;
function request(type: "POST", url: string, data: object): void;
function request(type: "GET" | "POST", url: string, data?: object) {
  console.log(type, url, data);
}

request("GET", "/api");               // ✅ 正确
request("POST", "/api", { a: 1 });    // ✅ 正确
request("POST", "/api");              // ❌ 报错,POST 必须传 data

⚡️ 适合 API 请求这类严格参数校验。


✅ 总结:

  • 几个固定字符串/数值 → 字面量联合类型(推荐)

  • 需要复用或语义化 → enum

  • 参数是对象字段 → keyof

  • 数组值限定 → as const

  • 不同参数组合 → 函数重载

掌握TypeScript函数的实例与技巧 TypeScript作为JavaScript的一个超集,它在JavaScript的基础上增加了类型系统和对ES6+的支持,这使得TypeScript在代码组织和大型项目开发中表现得更为出色。在TypeScript中,函数的定义是编写可维护和可复用代码的基础。本章节将深入探讨TypeScript中函数的定义,包括其基础语法、类型注解、返回类型,以及函数在实际工作中的应用场景和优势。在TypeScript中,函数可以通过函数声明和函数表达式两种方式进行定义。函数声明使用function。 阅读详情

相关推荐

DC-DC拓扑:从电感位置一眼识别Buck、Boost与Buck-Boost

本文详细解析了DC-DC拓扑中电感位置对识别Buck、Boost与Buck-Boost电路的关键作用。通过对比不同拓扑的电感连接特征,提供快速识别方法和设计要点,帮助工程师避免常见错误并优化电路性能。特别强调电感位置对输出质量和效率的影响,适合电源设计人员参考。

java2000.net 372

Ts的理解与常用类型的限制

Ts的理解与常用类型的限制

学思QAQ的博客 606

cutlass2.x源码解读之PitchLinearStripminedThreadMap

TensorCoord:使用layout::PitchLinearCoord作为张量坐标。Shape:使用模板参数Shape_作为tile的形状,kThreads:线程总数,定义为模板参数Threads。kElementsPerAccess:每次访问的元素数,定义为模板参数ElementsPerAccess。ThreadAccessShape:线程访问的形状,使用layout::PitchLinearShape定义。内部实现细节:ShapeVec。

jiangjkd的专栏 790

TS函数规范,类型限制 void

在TS中函数也可以限制类型 这个限制的类型是对于返回值的限制 例如你的方法执行完会返回一个数字 那你就可以这样写 function Pretreatment(): number{ console.log('我返回111'); return 111; } 返回一个字符串 function immediately(): String{ console.log('我返回一段文字'); return '一段文字'; } 以此类推 但如果我们的方法不需要返回值呢? 确实官方给我准备了void

weixin_45966674的博客 2909

SAP Ariba Procurement_Catalogs

SAP Ariba Procurement_Catalogs Search Functionality PunchOut Catalogs Spot Buy catalog

CZxx1的博客 1014

面试篇 - LoRA(Low-Rank Adaptation) 原理

输出示例:trainable params: 262,144 || all params: 6,742,016,000 || trainable%: 0.0039。论文实验显示:零初始化 BB 可使初始损失与预训练模型相差不足0.1%,而非零初始化可能差50%+。若初始 ΔW≠0,模型可能立即偏离预训练学到的知识(如GPT-3突然忘记如何造句)。:如同汽车改装,先保持原厂配置(W),再逐步加装新部件(ΔW),避免直接飙车失控。:大模型的权重变化矩阵 ΔWΔW 通常是低秩的(少数主成分主导变化)。

qq_60245590的博客 1152

ts:如何给对象的键限制类型

但是当我们访问 styleObj[Status[0]] 仍然显示类型错误,ts并不知道,Status[0] 是什么,我们可以在这里做一次断言,以上写法,如果是js的化,没有任何问题,但是我们用的是ts,ts会显示item.status 是anyl类型,不能作为styleObj 的键。后端返回一个数组,数组里面描述了对象的状态,我们需要根据的状态去绑定样式或者class类。我们首先考虑到的是限制styleObj的键,如何限制呢?,keyof 则是遍历对象的键,并进行联合。枚举的本质是一个对象。

qq_40681984的博客 1036

统信UOS开发环境支持Java

集成了JDK和多种IDE,为开发者提供了从代码编写、编译、调试到部署的一站式开发解决方案。

RZer的博客 2255

1.TS基本数据类型

TS 可以给声明的变量进行数据类型的限制,限制该变量的数据类型必须为TS所限定的数据类型 声明变量为 布尔类型 let isDone: boolean = false 数字类型 let age: number = 10 字符串类型 let firstName: string = 'viking' 模板字符串也可以 let message: string = `Hello, ${firstName}` undefined 数据类型和 null数据类型 let u: undefined = undefi.

qq_59181609的博客 575

Oracle到金仓数据库信创改造迁移实施规划方案

**性能测试和优化**:对金仓数据库的性能进行测试,根据业务负载情况进行必要的调优,确保系统能够稳定高效运行。- **数据兼容性**:评估Oracle数据库中的数据结构和金仓数据库的兼容性,明确需要重构的数据模型。- **性能测试**:通过对金仓数据库的性能测试,预估在实际业务环境下的表现,是否能达到业务需求。- **工具选择**:选择适合的迁移工具,如金仓数据库提供的迁移工具,能够提升迁移效率和准确性。- **全面迁移**:在初步迁移成功后,进行全面数据迁移,确保所有数据完整迁移到金仓数据库上。

hdrhdrjdididrr的博客 480

YOLOv11模型剪枝实战:让检测速度翻倍,精度仅降1%的终极优化教程

模型剪枝是YOLOv11落地边缘场景的“关键一步”——它让模型在“瘦身”的同时,几乎不损失精度。从稀疏化训练到通道剪枝,再到工程部署,本教程已为你打通全流程。现在就动手尝试,让你的YOLOv11模型在嵌入式设备、移动端上也能“飞起来”——相信我,当你看到剪枝后的模型在资源受限设备上仍能精准检测时,你会明白这份技术的价值。

m0_64661770的博客 711

TypeScript中对象的类型限制——接口

需要注意:只读的约束存在于第一次给对象赋值的时候,而不是第一次给只读属性赋值的时候,还有就是给对象赋值的时候,必须给只读属性赋值。有的时候我们不想要跟接口的属性一摸一样,就可以给接口用?以外,也常用于对对象的形状进行描述。为对象指定类型时,必须与接口的’形状’一模一样,多一个少一个都会报错。TypeScript 中的接口是一个非常灵活的概念,除了可用于。🟣 前端2026最新【持续更新】→。🟢 前端0到1【持续更新】→。🔵 前端进阶【持续更新】→。

zhang1339435196的博客 5815

蓝牙配对鉴权过程深度剖析:Just Works/Numeric Comparison/Passkey Entry/OOB 协议流程

当你新买的智能手表与手机配对时,是否遇到过这样的情况:有时只需在手机上点击 "确认" 即可完成配对,有时却需要在手表上输入手机显示的 6 位数字,而连接车载蓝牙时可能又需要输入固定密码?这些差异背后,是蓝牙配对鉴权机制在默默工作。蓝牙配对鉴权是设备间建立安全连接的核心环节,直接关系到数据传输的保密性和设备身份的真实性。​

byte轻骑兵的技术小窝 3573

【TypeScript】深入理解 Rest 参数与参数解构

TypeScript 提供了丰富的函数参数处理方式,包括Rest参数、展开语法和参数解构,这些特性让开发者能够更灵活地定义和调用函数。通过合理使用这些特性,可以简化代码结构,提高可读性和可维护性。此外,理解函数的返回类型,特别是void的使用规则,有助于编写更加严谨和高效的 TypeScript 代码。

lph159的博客 1663

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

typescript设置默认值_TypeScript 中的命名参数、可选参数、默认参数

对于一些功能比较复杂的函数,需要将很多配置项作为参数传入,这时候传统的位置参数表就不太方便了,因为对于配置项参数,我们往往会设置默认值,希望使用者无需按顺序传入所有参数,而只要指明哪几个参数需要特别配置。比如一个简单的字符串格式化函数,除了必需的传入值 value 外,有三个配置项:indent :缩进caseMode :大小写callback :转换完成后的回调前端代码中应该如何定义呢?我们先看...

weixin_31445091的博客 3563

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

TypeScript 中的命名参数、可选参数、默认参数

对于一些功能比较复杂的函数,需要将很多配置项作为参数传入,这时候传统的位置参数表就不太方便了,因为对于配置项参数,我们往往会设置默认值,希望使用者无需按顺序传入所有参数,而只要指明哪几个参数需要特别配置。 比如一个简单的字符串格式化函数,除了必需的传入值value外,有三个配置项: indent:缩进 caseMode:大小写 callback:转换完成后的回调 前端代码中应该如...

entronad的博客 4164

剩余参数的类型约束:TypeScript 中的强大功能

剩余参数是 JavaScript(及 TypeScript)函数的一个特性,允许你在函数定义中使用一个表示“多个参数”的语法。这些参数会被收集为一个数组,方便在函数体内进行处理。剩余参数提供了一个灵活的方式来处理不确定数量的参数。TypeScript 通过强大的类型系统为剩余参数提供了精确的类型约束,从基本类型到复杂结构,使得开发者能够编写更加安全且可维护的代码。基本类型约束:确保剩余参数符合某一类型或联合类型。数量限制:通过元组类型,限制剩余参数的个数。与其他参数结合。

Cc040909的博客 1123

typeScript学习(九)、function_type_参数限制_返回值类型

// let greet: Function; // // greet = (name: string): void => { // console.log(`hello ${name}`); // }; // // greet('world') /**********************参数限制********************************** */ //声明 let greet: (a: string, b: string) => void; //实现 gree

黄孝果的博客 1027

TypeScript使用技巧

TypeScript作为JavaScript的超集,通过提供静态类型系统和对ES6+新特性的支持,使JavaScript开发变得更加高效和可维护。掌握TypeScript的使用技巧,可以帮助我们更好地开发和组织JavaScript项目。

study_way的博客 1472

TypeScript可选参数

本文介绍了 TypeScript 中的可选参数功能。可选参数通过在参数名后加 ? 表示(如 name?: string),允许调用函数时省略该参数。未传入时参数值为 undefined,使用时需先判断是否存在。可选参数必须放在必需参数之后,且传入时仍需符合类型约束。文中通过示例对比了必需参数与可选参数的区别,并指出可选参数与默认参数、可选属性的不同应用场景。最后强调在 Vue3 等框架中,可选参数能灵活处理非必传数据,提升代码适应性。

谷哥的小弟 251

Vue 3.8 的 v-model:title 动态指令参数在 TypeScript 泛型组件中的类型推导限制

在前端开发的“战场”上,Vue 3 凭借其简洁高效的特性成为众多开发者的得力“武器”,TypeScript 则像一位严谨的“卫士”,为代码质量保驾护航。当 Vue 3.8 的 v-model:title 动态指令参数遇上 TypeScript 泛型组件,本以为是“强强联合”,却没想到在类型推导的环节,遭遇了不少“拦路虎”。这不仅让开发者在编写代码时频繁“踩坑”,更成为前端面试中面试官考察候选人技术深度的热门问题。别担心,今天这篇文章就像一剂“布洛芬”,帮你缓解困惑,理清思路,轻松攻克这个难题。

前端大白话 1299

10 个关于 TypeScript 的小技巧

英文 |https://www.sangle7.com/1、TypeScript 和 DOM当你开始使用 TypeScript 时,你会发现在浏览器环境中使用它,你需要非常了解它。假...

web前端开发 583

TypeScript 数组的类型

TypeScript 数组的类型 最简单的方法是使用「类型 + 方括号」来表示数组 let fibonacci: number[] = [1, 1, 2, 3, 5]; 数组的项中不允许出现其他的类型: 数组的一些方法的参数也会根据数组在定义时约定的类型进行限制: let fibonacci: number[] = [1, 1, 2, 3, 5]; fibonacci.push(...

Army-海军的博客 2万+

用typescript完成倒计时_TypeScript 中的命名参数、可选参数、默认参数

对于一些功能比较复杂的函数,需要将很多配置项作为参数传入,这时候传统的位置参数表就不太方便了,因为对于配置项参数,我们往往会设置默认值,希望使用者无需按顺序传入所有参数,而只要指明哪几个参数需要特别配置。比如一个简单的字符串格式化函数,除了必需的传入值 value 外,有三个配置项:indent :缩进caseMode :大小写callback :转换完成后的回调前端代码中应该如何定义呢?我们先看...

weixin_39968309的博客 95

TypeScript 实用技巧(上)

如果 JavaScript 代码有类型定义,那么编辑器可以使用它们来改进自动补全。除了使用 TypeScript 的语法之外,还可以通过 JSDoc 注释提供所有类型信息 - 就像我们在本章开头所做的那样。在这种情况下,TypeScript 也可以检查代码的一致性并生成类型定义。有关更多信息,请参见 TypeScript 手册中的“类型检查 JavaScript 文件”章节。唯一命名空间迭代内存 CT内存 RT穷举数字枚举✔✔字符串枚举✔✔✔✔-✔字符串联合✔✔符号联合✔✔✔。

龙哥盟 1398
上一篇: ORM 框架(Object-Relational Mapping,对象关系映射),包括 是什么、解决什么问题、常见框架、优缺点、使用场景。
下一篇: Vue3 + JS 实现的 获取当前时间并每秒自增 的小 demo
星空下的DeppBing
博客等级 码龄7年 552粉丝 260原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下的DeppBing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值