TypeScript调用匿名函数提示Cannot find name参数报错
报错原因
TypeScript 抛出 Cannot find name c 错误本质是作用域认知偏差:
- 参数位置写的
b: (c: number) => void属于类型标注,这里的c只是用来描述「b需要接收一个数字类型参数」的形式占位符,只在类型定义的上下文里有意义,不会在fn的函数作用域里生成任何名为c的实际可访问变量。 - 你在函数体里写
b(c)时,TS会沿着当前fn作用域、上层全局作用域查找名为c的真实变量,找不到自然触发找不到名称的报错。
正确调用方式
调用参数b的时候,必须传入一个真实存在、符合number类型要求的值,根据业务场景常见两种写法:
- 场景1:把fn的入参a传给b
function fn(a: number, b: (c: number) => void) { // a是当前作用域内存在的number类型变量,满足b的入参类型要求 b(a); }
- 场景2:把fn内部计算生成的值传给b
function fn(a: number, b: (c: number) => void) { // 内部逻辑生成要传给b的参数值 const calcResult = a + 10; b(calcResult); }
补充说明:函数类型标注里的参数名仅用于提升类型可读性,你把标注里的
c改成任意名字比如(targetVal: number) => void,类型约束效果完全不变,不会影响实际代码逻辑。
内容的提问来源于stack exchange,提问作者Glitch in the Matrix Locator
相关产品推荐
相关产品推荐

