函数类型声明与接口中约束函数类型问题

来源:2-18 声明文件 第二部分

ForCoke

2022-04-20

1、老师,我们进行类型声明的时候后可以采用:
let add: (n1: number,n2: number): number;
let add1: (n1: number,n2: number) => number;
这两种声明方式究竟有什么不同呢?
2、为什么我们在用接口约束函数的时候,只能:

interface MyInter{
	(n1: number,n2: number): number;
}

而不能:

interface MyInter{
	(n1: number,n2: number) => number;
}

3、同时在本节课中,我们在接口中定义属性,属性值为函数类型时:

interface MyInter{
	(n1: number,n2: number): number;
	plus: (numbers: number[]) => number;
	//能不能:
	minus: (numbers: number[]): number;
}
写回答

2回答

张轩

2022-04-21

同学你好 

假如是直接声明函数形式:你 let add: (n1: number,n2: number): number; 的这个格式是错误的,只能是是第二种格式。

同理使用interface描述函数,只能是

interface MyInter{
	(n1: number,n2: number): number;
}

这种格式。

其实这没有什么原因,只是硬性规定而已。记住就好了。

3 因为JavaScript是灵活多变的,所以函数上面也能有属性,第三种方式就是描述了这种混合的类型。

0
1
ForCoke
昨天看了太多,脑子迷糊了,后面去天台抽了一支烟理解清楚了。 (n1: number,n2: number) => number 这种方式是给变量或者属性进行类型定义,而 (n1: number,n2: number): number 则是声明定义函数即有实体时,对函数的各个变量,返回值进行类型定义
2022-04-21
共1条回复

希望林柚一健康快乐成长

2022-04-21

您好,好奇怪,为啥消息通知让我来回答。。。   

其实你疑问的时候,我把你的代码放到vscode中了,是会报错的,我理解的是定义函数类型的时候,用箭头,而你给函数具体的函数体的时候,用 : 号,这只是ts的语法,,更多查看官网说明https://www.typescripttutorial.net/typescript-tutorial/typescript-function-types/,希望能帮到你


0
3
ForCoke
哥们,感谢回答,昨晚脑子宕机啦~~~
2022-04-21
共3条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程