TS——总结函数类型的定义方法

 

在线ts运行

2020.2.26 补充泛型函数定义方式


1 函数声明的类型定义

function say(person: string, content: string): boolean { 
    if (person === '' || content === '') return false;
    console.log(`${person}say:${content}`);
    return true;
}

延伸出——对象方法新写法下的类型定义

const somebody = {
    say (person: string, content: string): boolean { 
        if (person === '' || content === '') return false;
        console.log(`${person}say:${content}`);
        return true;
    }
};

补充——泛型函数的定义方式:

泛型的使用为了方便复用函数——复用不同类型输入,但是行为和操作逻辑一致的函数。

function say<T>(operate: T, person: string, content: string): boolean { 
    if (person === '' || content === '') return false;
    console.log(`${person} ${operate}:${content}`);
    return true;
}

2 函数表达式的类型定义

函数表达式类型的写法有三种:

  • 一种类似 1 的写法,将类型定义的代码都嵌入到函数定义里边
const say = function (person: string, content: string): boolean { 
    if (person === '' || content === '') return false;
    console.log(`${person}say:${content}`);
    return true;
};

补充——加入泛型的定义方式:

const say = function <T> (person: string, content: string, operate: T): boolean { 
    if (person === '' || content === '') return false;
    console.log(`${person}${operate}:${content}`);
    return true;
};

  • 一种是先使用 type 别名定义函数的类型,然后借助类型推导,完成对函数的定义。
type sayType = (person: string, content: string) => boolean;
var say: sayType = function (person, content) { 
    if (person === '' || content === '') return false;
    console.log(`${person}say:${content}`);
    return true;
};

补充——加入泛型的定义方式:

type sayType = <T>(operate: T, person: string, content: string) => boolean;
var say: sayType = function (operate, person, content) { 
    if (person === '' || content === '') return false;
    console.log(`${person} ${operate}:${content}`);
    return true;
};

  • 一种是使用接口定义函数的类型,思路同上,借助类型推导。注意,接口名首字母要用大写。
interface Say { 
    (person: string, content: string): boolean;
}
const say: Say = function (person, content) { 
    if (person === '' || content === '') return false;
    console.log(`${person}say:${content}`);
    return true;
};

补充——泛型接口的定义方式:

一种是放在接口大括号的外边,但是在使用接口的使用就一定要将实际用的类型穿进 <> 内。

type sayWhileSimiling = 'gegege' | 'hhhh';
interface Say<T> { 
    (operate:T, person: string, content: string): boolean;
}
const say: Say<sayWhileSimiling> = function (operate, person, content) { 
    if (person === '' || content === '') return false;
    console.log(`${person}${operate}:${content}`);
    return true;
};

一种是的在大括号内部,这种情况不需要在接口使用的时候就将实际用的类型穿进去,而是在实际函数调用时再传入。

interface Say { 
    <T>(operate:T, person: string, content: string): boolean;
}
const say: Say = function (operate, person, content) { 
    if (person === '' || content === '') return false;
    console.log(`${person}${operate}:${content}`);
    return true;
};

延伸出——箭头函数的类型定义方法

箭头函数通常写成函数表达式的形式:

const say = () => {};

所以箭头函数的类型定义,就与函数表达式的非常相似,完全可以使用上边的三种方法定义类型,这里就写出嵌入函数里边的写法:

const say =  (person: string, content: string): boolean => { 
    if (person === '' || content === '') return false;
    console.log(`${person}say:${content}`);
    return true;
};

 

补充——箭头函数的泛型定义方式:

const say = <T>(operate:T, person: string, content: string): boolean => { 
    if (person === '' || content === '') return false;
    console.log(`${person}${operate}:${content}`);
    return true;
};

总结:好像函数声明式及其衍生形式只能采用嵌入函数里边的写法,而函数表达式的写法有很多种,比较灵活。

 
  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在TypeScript中,可以使用以下几种方式来定义函数类型。首先,可以使用函数声明法来定义函数类型,例如:\[1\] ```typescript function fun(): string { return '123'; } ``` 其次,可以使用匿名函数法来定义函数类型,例如:\[3\] ```typescript let fun2 = function (): number { return 123; }; ``` 还可以定义没有返回值的方法,例如:\[3\] ```typescript function fun3(): void { console.log(111); } ``` 此外,为了实现函数重载,可以引入可选参数,例如:\[2\] ```typescript function times(x: number, y?: number) { if (y) { return x * y; } return x; } ``` 以上是在TypeScript定义函数类型的几种常见方式。 #### 引用[.reference_title] - *1* [TS函数类型定义](https://blog.csdn.net/weixin_44530344/article/details/126683321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [TS基础——为函数声明类型](https://blog.csdn.net/weixin_41387874/article/details/123078371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [TS复习-----TS中的函数](https://blog.csdn.net/qq_63358859/article/details/126926898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值