前端小技巧: TS实现一个获取传入参数类型的函数

JavaScript默认参数不是语法糖:函数契约与执行时机深度解析 JavaScript函数默认参数是ES6引入的核心语言特性,本质是对函数调用流程的底层重构,而非简单的逻辑或操作符替代。其核心原理在于‘调用时求值’——默认值表达式在每次函数调用栈初始化阶段动态执行,确保与运行时上下文(如window.location、环境变量)严格同步。这一机制支撑了配置对象默认化、React/Vue组件Props处理、CLI参数解析等高频工程场景,显著提升接口健壮性与可维护性。结合解构赋值与剩余参数,更能实现深层嵌套默认配置与灵活参数组合。理解其与undefined的精确匹配语义、对a 阅读详情

分析

  • 在前端中,能判断类型的无非几种
    • 1 )typeof 只能判断值类型,其他就是 function 和 object
    • 2 ) instanceof 需要两个参数判断,不是获取
    • 3 )手动枚举各种类型
      • 可能会忽略某些类型
      • 如果新增了类型,则需要修改代码
      • 这种方案不可取
    • 4 )原生API
      • Object.prototype.toString.call(input) input 是用户输入
      • 而非 input.toString() 这种不可行

测试 Object.prototype.toString.call

  • Object.prototype.toString.call(12) // ‘[object Number]’
  • Object.prototype.toString.call(NaN) // ‘[object Number]’
  • Object.prototype.toString.call(-Infinity) // ‘[object Number]’
  • Object.prototype.toString.call('abc') // ‘[object String]’
  • Object.prototype.toString.call([]) // ‘[object Array]’
  • Object.prototype.toString.call({}) // ‘[object Object]’
  • Object.prototype.toString.call(() => {}) // ‘[object Function]’
  • Object.prototype.toString.call(new Set()) // ‘[object Set]’
  • Object.prototype.toString.call(new WeakSet()) // ‘[object WeakSet]’
  • Object.prototype.toString.call(new Map()) // ‘[object Map]’
  • Object.prototype.toString.call(new WeakMap()) // ‘[object WeekMap]’
  • Object.prototype.toString.call() // ‘[object Undefined]’
  • Object.prototype.toString.call(undefined) // ‘[object Undefined]’
  • Object.prototype.toString.call(null) // ‘[object Null]’

基于以上测试,可看到可以获取具体的类型

代码实现

1 )编码

export function getType(input: any): string {
  const orgType = Object.prototype.toString.call(input) // '[object String]'
  const i = orgType.indexOf(' ')
  const type = orgType.slice(i + 1, -1)
  return type.toLowerCase() // 'string'
}

2 )测试

console.log(getType(1)) // number
console.log(getType(NaN)) // number
console.log(getType('ass')) // string
console.log(getType(null)) // null
console.log(getType(undefined)) // undefined
console.log(getType({})) // object
console.log(getType(() => {})) // function
console.log(getType(new WeakSet())) // weakset
TS复习-----TS中的类 类(Class):定义了一切事物的抽象特点对象(Object):类的实例面向对象(OOP)三大特性:封装继承多态// 定义类// 公共属性,默认可以不写// 构造函数// 初始化name属性}}// 实例化类。 阅读详情

相关推荐

OPPO前端秋招笔试复盘:工程化与微前端实战考察

前端开发的核心早已不只是页面还原,更考验工程化思维与性能优化的落地能力。从浏览器缓存、事件循环到Vue响应式原理,再到微前端架构、Worker上传大文件等场景化问题,如今的大厂秋招笔试越来越注重候选人是否具备真实业务经验。本文以一次OPPO前端岗笔试为例,拆解选择题、手写题与场景设计题背后的考察逻辑,分享时间分配、答题节奏和备考方法。同时,结合AI辅助练习与codebuddy等前端skill的合理使用,帮助你在准备笔试时从“背答案”转向“建体系”,更从容应对技术面试中的开放性挑战。

weixin_34293141的博客 405

TypeScript 获取函数的参数类型、返回值类型

TypeScript 获取函数的参数类型、返回值类型

zgwnDong的博客 1万+

GraphQL类型系统:Scalar、Enum与Interface的工程化实践

GraphQL类型系统是定义API数据契约的核心机制,其本质是一套可执行、可验证、可自省的运行时约束体系。它通过Scalar(基础与自定义标量)保障原子数据的语义安全,借助Enum实现有限值集合的编译期校验与演进友好,再以Interface构建跨服务的数据抽象层,达成前端查询与后端实现的解耦。这种分层设计显著提升协作效率、降低运行时错误,并支撑微服务与跨语言(如.NET Core)集成。理解Scalar序列化/解析逻辑与Enum映射规则,是落地类型安全GraphQL服务的关键起点。

weixin_33946020的博客 440

TS中获取函数的参数类型、函数的返回值类型、构造函数的参数类型

背景:通常在业务中我们需要封装一些公共函数或者引入第三方库的函数、类,在TS语法环境下,如何在调用函数处给定义的变量进行类型定义?是需要全局定义变量类型亦或是各自定义?当然都不需要,我们可以通过ts中给出的关键词来获取相关参数。

专注前端技术,包括Web端、移动端、小程序、APP 1779

【TypeScript】TS条件类型(十)

条件类型允许根据一个或多个条件对类型进行推断,并且还能在在类型级别上进行复杂的逻辑运算和类型操作。

编码世界 6万+

字符串替换—牛客网(C++实现)

一.题目描述 请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。 给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。 测试样例: “A%sC%sE”,7,[‘...

qq_38358582的博客 1523

【TS】typescript 获取函数入参类型、返回值类型、promise返回值类型

typescript 获取函数入参类型、返回值类型、promise返回值类型

呆呆狗 2865

电路仿真软件PSIM简介

PSIM的基本使用操作...

qq_55203246的博客 7185

前端小技巧: TS实现bind函数,call函数,以及apply函数

绑定 this传入执行参数分析:如何在函数执行时,绑定this如:const obj = {x: 100, fn() {this.x}}执行obj.fn(), 此时fn内部的this就指向obj可以借次来实现函数绑定 this用 call 实现 apply, 用 apply 实现 call 不可取原生 call apply 的 this 如果是值类型sing,会被 new Object(…)Symbol 的作用,是防止属性之间的冲突。

Wang的专栏 1759

免费AI视频生成全流程:通义千问+Seedance 2.5+Grok实战指南

AI视频生成正在成为内容创作的重要方式,但高昂的API费用常让个人创作者望而却步。实际上,通过合理组合云端免费工具,也能搭建一条完整的视频生产链路:利用大模型生成脚本,用视频生成模型将文本渲染成画面,再借助多模态模型进行一致性校验。这种“文本+视频+多模态”的协作模式,将复杂的生成任务解耦为可独立调用的模块,既降低了本地硬件要求,也为批量内容验证提供了低成本方案。该流程适用于短视频素材快速产出、产品Demo验证以及AI应用集成等场景,核心在于打通免费账号、API调用与批量任务调度。本文以通义千问、Seeda

weixin_29044157的博客 386

Nexus3国内高速下载指南:多版本全平台资源汇总

本文针对国内开发者从官网下载Nexus 3速度慢、易失败的问题,提供了详尽的解决方案。汇总了Windows、Linux、macOS等多个平台的Nexus 3历史及最新版本(如3.31.1)的国内高速下载链接,并附有版本选择建议与Linux环境下的快速启动指南,帮助用户高效获取和部署这一流行的仓库管理工具。

jwt8token的博客 433

前端小技巧: TS实现柯里化函数

【代码】前端小技巧: TS实现柯里化函数。

Wang的专栏 549

平行趋势检验没通过怎么办?别慌,试试三重差分DDD与事件研究法

本文探讨了当平行趋势检验未通过时,如何运用三重差分法(DDD)与事件研究法进行政策评估。通过Stata代码示例和实战案例,详细介绍了DDD的原理、适用场景及实现步骤,并提供了替代方案如合成控制法和匹配DID,帮助研究者获得更准确的因果推断结果。

weixin_28732953的博客 618

前端小技巧: TS实现new出一个对象的内部过程

{} 创建空对象,原型指向 Object.prototype。Object.create 创建空对象,原型指向传入的参数。

Wang的专栏 1318

DDR4 硬件设计笔记

DDR4-DRAM是第四代支持双倍数据读取,支持随机位置存取的静态存储器。DDR4-DRAM的工作原理。DDR之T拓扑和Fly-by拓扑。DDR的硬件设计。DDR4 PCB设计要点介绍。DDR4之PCB走线间距的串扰评估。DDR4之内存通道(channel)和内存列(rank)。

qq_26815321的博客 1万+

避坑!瑞萨RZ/N2L用J-Link下载调试的那些‘坑’(从驱动版本到硬件架构选择)

本文详细解析了瑞萨RZ/N2L开发中使用J-Link调试时常见的兼容性问题与解决方案,包括驱动版本选择、SWD连接优化及e2 studio调试技巧。特别针对硬件架构与驱动版本的匹配问题提供了实用对照表,帮助开发者高效避开调试陷阱,提升开发效率。

weixin_30576827的博客 442

优雅永不过时!你试过这样的函数重载吗?

在上面的例子中,两个实现匹配到的都是第一个函数签名(运行起来虽然会得到想要的结果,但是 TS 会报错)。在编写一些通用库 / 通用方法时,为了支持多种使用方式,就需要有多个参数,参数的数量和类型不同,所对应的处理方法也不同。如果匹配不到相应的函数类型,或者定义的实现函数参数或返回值类型不匹配,TS 就会报错,拥有完善的类型检查和提示。方法时,先写好最后一个函数参数占位,再写前面的参数类型,就可以随时获得代码补全提示,方法,最后一个参数为函数实现,之前的各个参数都是字符串,对应不同的参数类型。

奇舞周刊 272

置顶必读(1) | 《YOLOv26实战:从入门到深度优化》专栏导读与完整目录导航(持续更新中)

🏆 本文收录于 《YOLOv26实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现 YOLOv26 官方特性、核心改进、多任务支持、部署优化与行业落地,内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么用”,更讲“为什么这样设计、如何真正落地到项目中”。

**My Coding Family** 9万+

easy-vibe 实战:从 JavaScript 到 TypeScript 的类型安全编程指南

> 本文是 easy-vibe 仓库「浏览器与前端」附录中的 TypeScript 原理实战篇。你将理解 TypeScript 如何把"运行时才发现"的错误提前到"写代码时"暴露,掌握类型注解、接口、泛型、类型守卫与工具类型六大核心能力,并学会在 vibecoding 场景下让 AI 生成类型安全的代码、读懂编译错误提示、以渐进方式把现有 JS 项目平滑迁移到 TS。 ## 1. TypeScr

gitblog_00727的博客 248

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

一行代码实现JavaScript运行时类型校验

JavaScript运行时类型校验是弥补TypeScript擦除缺陷、保障生产环境健壮性的关键能力。其核心原理基于typeof与Object.prototype.toString.call的分层协同:前者快速判定基础类型,后者精准识别内置对象标签,兼顾性能(15~25ns)与覆盖度(string/number/array/date/regexp等)。该技术不依赖外部库,零运行时开销,天然适配工具函数、API入口、第三方数据对接等高频轻量校验场景,尤其适用于需在函数入口建立‘类型安检门’的工程实践。

weixin_30680385的博客 356

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TypeScript实现类型安全的发布订阅模式:从原理到实战应用

发布订阅模式是一种实现组件间松耦合通信的核心设计模式,通过事件中心协调发布者和订阅者,有效解耦系统模块。其原理基于事件映射与回调管理,利用TypeScript的泛型和类型系统,能为事件名和载荷提供静态类型检查,大幅提升代码可靠性。这一模式的技术价值在于增强代码可维护性、可扩展性,并避免直接依赖导致的复杂链式调用。在前端开发中,它广泛应用于Vue/React组件通信、状态管理;在Node.js后端,则服务于微服务架构下的事件驱动通信。本文以TypeScript为核心,手把手构建一个具备类型安全、支持异步事件和

weixin_34146805的博客 454

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JavaScript默认参数不是语法糖:从V8引擎到ECMAScript规范的深度解析

JavaScript默认参数是函数定义的核心机制,而非简单的语法糖。它在语法解析阶段触发AST节点重构,影响参数环境记录创建、作用域链构建及时序绑定逻辑。其原理根植于ECMAScript规范第14.1.20节的参数求值顺序规则,直接决定this、super等关键字的可用性边界,并深刻影响Bun与Node.js等运行时的行为差异。该特性在Vue3内存溢出、TypeScript类型推导冲突、Webpack tree-shaking失效等典型生产问题中频繁暴露,是前端工程化与高阶调试必须掌握的基础能力。

weixin_33744854的博客 431

TypeScript字符串字面量类型:类型系统的核心基石与工程实践

字符串字面量类型是 TypeScript 类型系统的基础能力,它使具体字符串值(如 'loading'、'GET')成为可识别、可收缩、可参与类型运算的‘第一类类型公民’。其核心原理在于编译器将字面量作为独立类型节点注入类型空间,并通过严格保留策略(如 const 声明、as const)确保类型精确性。这一机制支撑了类型收缩、联合类型安全赋值、switch 分支穷尽检查等关键能力,直接提升 API 契约可靠性、状态机安全性与 UI 组件健壮性。在实际工程中,它广泛应用于 React props 限定、Zo

weixin_33851429的博客 344

JavaScript函数默认值原理与实战陷阱解析

JavaScript函数参数默认值并非简单语法糖,而是基于undefined触发的语义化回退机制,其核心在于区分'未提供'(undefined)与'显式传入空值'(null/0/false/'')两种调用意图。该机制影响参数绑定顺序、作用域求值时机、解构嵌套降级及TypeScript类型协同。理解其运行时动态求值特性可规避共享引用、竞态条件、this丢失等高频陷阱;结合??、?.等现代运算符,能构建更健壮、可读性更强的配置驱动型API。本文深入剖析ES2015默认参数的设计哲学与工程实践边界。

weixin_33749131的博客 376

2024年前端最全《vue3+ts+element-plus 后台管理系统系列》之网络请求封装,面试加分小技巧

小编综合了阿里的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

2401_84411822的博客 1233

TypeScript模块增强:为第三方库安全扩展类型定义

模块增强(Module Augmentation)是 TypeScript 中用于在不修改源码前提下,合法、增量地扩展已有模块类型声明的核心机制。其原理基于编译期的声明合并(Declaration Merging),通过 declare module 语法精准作用于特定模块作用域,支持 interface、namespace、export 等安全追加,杜绝签名篡改与全局污染。该技术显著提升类型覆盖率与 CI 稳定性,广泛应用于补全 axios、zod、lodash 等第三方库缺失接口、注入运行时 SDK 类

weixin_33816300的博客 413
上一篇: 前端小技巧: 面向切面编程在前端代码中的应用
下一篇: 设计模式: 关于编程范式的声明式和命令式编程及应用框架的开发和设计原则
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Wang's Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值