Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在TypeScript中使用函数类型_Javascript_Typescript - Fatal编程技术网

Javascript 如何在TypeScript中使用函数类型

Javascript 如何在TypeScript中使用函数类型,javascript,typescript,Javascript,Typescript,我试图理解如何使用“函数类型” 假设我们有以下几点: function calSum(val1: number, val2: number): number{ return val1 * val2; } console.log(calSum(10,20)); //prints 200 calc(10,20); 现在让我们假设我们有: let calc: (value1: number, value2: number) => number; 如果我这样做: function c

我试图理解如何使用“函数类型”

假设我们有以下几点:

function calSum(val1: number, val2: number): number{
    return val1 * val2;
}
console.log(calSum(10,20)); //prints 200
calc(10,20);
现在让我们假设我们有:

let calc: (value1: number, value2: number) => number;
如果我这样做:

function calSum(val1: number, val2: number): number{
    return val1 * val2;
}
console.log(calSum(10,20)); //prints 200
calc(10,20);
我希望看到200个,但我得到以下错误:

Uncaught TypeError: calFuncType is not a function
我想了解这是为什么,以及如何使用此类型?

此:

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;
这:

汇编成:

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;

在您的示例中,
calSum
是函数的具体实现,而
calc
是一个尚未赋值的变量,因此它是
未定义的
。您已经指定了
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将知道
乘法
加法
都使用两个
数字
参数并返回一个
数字
,因为它们都显式实现了
CalcFunction
接口

然后,例如,您可以执行以下操作:

let calculate = (calc: CalcFunction, a: number, b: number): number => {
  return calc(a, b);
}

在您的示例中,
calSum
是函数的具体实现,而
calc
是一个尚未赋值的变量,因此它是
未定义的
。您已经指定了
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将知道
乘法
加法
都使用两个
数字
参数并返回一个
数字
,因为它们都显式实现了
CalcFunction
接口

然后,例如,您可以执行以下操作:

let calculate = (calc: CalcFunction, a: number, b: number): number => {
  return calc(a, b);
}

因为您正在为
calc
foo:type
)设置类型,而没有赋值(
foo=value
)。啊,我现在明白您的意思了!我没有将函数分配给函数类型变量@jonrsharpeShouldn,它不是
让calc=(value1:number,value2:number)=>value1*value2
?您实际上并没有创建函数。您正在定义一个类型。我真的不知道该怎么说。因为你正在为
calc
foo:type
)设置类型,而不是赋值(
foo=value
)。啊,我现在明白你的意思了!我没有将函数分配给函数类型变量@jonrsharpeShouldn,它不是
让calc=(value1:number,value2:number)=>value1*value2
?您实际上并没有创建函数。您正在定义一个类型。我真的不知道该怎么说。谢谢,是的,我明白了谢谢,是的,我明白了