我试图了解如何使用"功能类型"。
我们说我们有以下内容:
function calSum(val1: number, val2: number): number{
return val1 * val2;
}
console.log(calSum(10,20)); //prints 200
现在让我们说:
let calc: (value1: number, value2: number) => number;
如果我执行以下操作:
calc(10,20);
我希望看到200,但是我得到以下错误:
Uncaught TypeError: calFuncType is not a function
我想了解为什么会这样,以及如何使用这种类型?
答案 0 :(得分:5)
此:
let calc: (value1: number, value2: number) => number;
编译成:
let calc;
也就是说,您只声明了一个带有名称的变量,但您没有为其赋值。
这是为它分配值的方法:
let calc: (value1: number, value2: number) => number = function(val1: number, val2: number): number{
return val1 * val2;
}
编译器可以推断出类型,所以这应该足够了:
let calc = function(val1: number, val2: number): number{
return val1 * val2;
}
或者,使用箭头功能:
let calc = (val1: number, val2: number) => val1 * val2;
答案 1 :(得分:1)
在您的示例中,calSum
是您的函数的具体实现,而calc
是尚未分配给任何内容的变量,因此它是undefined
。您已指定calc
可以容纳的值的类型,但您实际上还没有给它一个值。
我认为您可能正在寻找的是如何为函数定义接口,然后实现该接口。例如:
interface CalcFunction {
(value1: number, value2: number): number;
}
let multiply: CalcFunction = (a, b) => a * b;
let add: CalcFunction = (a, b) => a + b;
let product: number = multiply(3, 5);
let sum: number = add(3, 5);
console.log(product); // 15
console.log(sum); // 8
TypeScript会知道multiply
和add
都需要两个number
个参数并返回number
,因为它们都明确实现了CalcFunction
接口。
然后,例如,您可以这样做:
let calculate = (calc: CalcFunction, a: number, b: number): number => {
return calc(a, b);
}