在 typescript 或 javascript 中链接箭头函数
Posted
技术标签:
【中文标题】在 typescript 或 javascript 中链接箭头函数【英文标题】:Linking arrow functions in typescript or javascript 【发布时间】:2018-07-04 23:12:44 【问题描述】:我在“Angular 入门,第二版”一书中偶然发现了以下箭头函数代码。
let isPrime: (n: number) => boolean = n =>
// body
;
我想确认此细分的正确性。
let isPrime
= 函数名称“isPrime”
(n: number)
= 输入参数号“n”
=> boolean
= 检查布尔值的箭头函数(放置逻辑的地方)
=n
= 我不明白这部分。这是否意味着如果我输入“在第三步中找到素数的逻辑”并且为真,你会得到满足我逻辑的“n”?
=>
= 我可以将 return 或其他逻辑放在这里进行最终处理。
最后一个问题是有多少箭头函数对于链式或循环来说太多了?
我相信@Fenton 对我的理解给出了明确的解释。
@Sebastien 给了我答案,让我意识到我对箭头函数的错误解释;等号和箭头符号并不总是指向函数,也可以表示数据类型。
以下是我接受的答案的组合版本。
类型
现在让我们描述一下这个函数的类型,即接受一个数字并返回一个布尔值。
//correct usage : return boolean
let isPrime: (n: number) => boolean = n =>
// body
return true
;
//incorrect usage
let isPrime: (n: number) => boolean = n =>
// body
return "wrong"
;
简单
我想我会这样写,除非我有充分的理由使用箭头函数!
//correct usage : return boolean
function isPrime(n: number): boolean
// body
return true;
//incorrect usage
function isPrime(n: number): boolean
// body
return "wrong";
我的期末考试是这样的。
let isRightLogic: (n: number) => host: boolean = n =>
return host: true ;
console.log(isRightLogic(1)); // always return true but you get the idea.
【问题讨论】:
【参考方案1】:在您发布的代码中,(n: number) => boolean
是正在创建的函数的类型签名。函数本身只是
n =>
// body
n
是参数名称,如类型签名所示。因此 Typescript 知道传递给函数的参数应该是数字,并且函数的返回值将是 true
或 false
。
符号isPrime
并不是正式意义上的函数名;它是一个变量,其值恰好是那个函数。
在纯 javascript 中,变量声明应该是 juss
let isPrime = n =>
// body
;
【讨论】:
【参考方案2】:这里有一些其他的方式来看待它,它们揭示了不同的观点。
普通
这是老派,只是一个接受 n
的函数,它应该是一个数字,在正文中的某个地方它返回真或假。
let isPrime = function(n)
// body
;
箭头函数
让我们使用箭头函数,而不是 function 关键字(这里有 一些 行为变化取决于函数体)...
let isPrime = (n) =>
// body
;
去掉括号
我们技术上不需要这些括号(尽管我认为没有它们的可读性会受到影响:
let isPrime = n =>
// body
;
类型
现在让我们描述一下这个函数的类型,即接受一个数字并返回一个布尔值。
let isPrime: (n: number) => boolean = n =>
// body
;
简单
我想我会这样写,除非我有充分的理由使用箭头函数!
function isPrime(n: number): boolean
// body
【讨论】:
【参考方案3】:我将把声明分成两部分
第 1 部分 - 变量类型定义
let isPrime: (n: number) => boolean
是isPrime
变量的类型定义。在这种情况下,isPrime
将包含一个函数:
(n: number) => boolean
它接受一个number
类型的参数并返回一个boolean
第 2 部分 - 分配给 isPrime
变量的实际值(在 =
符号之后)
n =>
// body
;
这是实际值,根据类型定义,它是一个接受一个参数的函数……但这里不完整,因为主体中没有返回值。
这是可以接受的:
let isPrime: (n: number) => boolean = n =>
return true
;
但这会违反返回类型定义
let isPrime: (n: number) => boolean = n =>
return 'wrong!';
;
为了回答你的最后一个问题,这里没有链接,只有一个变量类型定义,然后是一个赋值。
【讨论】:
以上是关于在 typescript 或 javascript 中链接箭头函数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript 或 typescript 在新窗口中打开页面? [复制]
从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象
Vscode 可用属性 intellisense 在参数为字符串的函数中使用 javascript 或 typescript
typescript 以javascript或angular格式化日期