TypeScript DescribableFunction可描述函数实现与调用咨询
TypeScript可描述函数实现与调用方案
DescribableFunction属于TypeScript里的带属性函数类型,它约束实例必须同时满足两个规则:
- 实例本身是可调用函数,签名为
(someArg: number): boolean,即接收数字类型参数,返回布尔值 - 实例上必须挂载名为
description的字符串类型属性
符合类型约束的实例实现方式
有两种通用实现方式,都能通过TS类型校验:
- 先定义函数再挂载属性
// 实现核心调用逻辑 function isBiggerThan10(num: number): boolean { return num > 10; } // 挂载要求的description属性 isBiggerThan10.description = "校验输入数字是否大于10";
- 用
Object.assign一次性合并函数与属性,写法更简洁,TS会自动推导类型合规
const isOdd = Object.assign( (num: number): boolean => num % 2 !== 0, { description: "校验输入数字是否为奇数" } );
如果实现时缺少description属性,或者函数的参数、返回值类型不匹配,TS会直接抛出类型错误。
doSomething的正确调用方式
直接把实现好的合规函数实例作为参数传入即可:
// 传入第一个实现的函数 doSomething(isBiggerThan10); // 控制台输出:校验输入数字是否大于10 returned false (因为内部传入参数是6,6>10不成立) // 传入第二个实现的函数 doSomething(isOdd); // 控制台输出:校验输入数字是否为奇数 returned false (6是偶数,取余不等于0不成立)
你也可以在调用时直接写内联实现,不过可读性较差,一般不推荐:
doSomething(Object.assign( (n: number) => n === 6, { description: "判断输入是否等于6" } )); // 控制台输出:判断输入是否等于6 returned true
内容的提问来源于stack exchange,提问作者Laurence Fass
相关产品推荐
相关产品推荐

