Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Typescript 在这种情况下,如何理解呼叫签名?_Typescript - Fatal编程技术网

Typescript 在这种情况下,如何理解呼叫签名?

Typescript 在这种情况下,如何理解呼叫签名?,typescript,Typescript,我是个打字新手,对电话签名很困惑。 在下面的代码中,有一个接口计数器,它被假定为函数类型,并具有一些额外的属性interval和reset。 我不明白这种说法: let counter=function(start:number){}作为计数器 变量计数器是一个未定义的函数返回,那么我们在这里使用类型断言,那么函数计数器有一个计数器类型? 在计数器接口中,函数有一个参数start和return字符串,但对于 let counter=function(start:number){},此函数声明返回

我是个打字新手,对电话签名很困惑。 在下面的代码中,有一个接口计数器,它被假定为函数类型,并具有一些额外的属性interval和reset。
我不明白这种说法:
let counter=function(start:number){}作为计数器
变量计数器是一个未定义的函数返回,那么我们在这里使用类型断言,那么函数计数器有一个计数器类型?
在计数器接口中,函数有一个参数start和return字符串,但对于

let counter=function(start:number){}
,此函数声明返回未定义,但编译器不会抛出任何错误,有人能给我解释一下吗

interface Counter {
  (start: number): string;
  interval: number;
  reset(): void;
}
function getCounter(): Counter {
  let counter = function (start: number) {} as Counter;
  counter.interval = 123;
  counter.reset = function () {};
  return counter;
}
let c = getCounter();c(10);c.reset();c.interval = 5.0;

Typescript并不完美,因为实际上很难将静态类型分层到这样一种动态语言上


这里的问题是,不能在单个语句中创建同时具有自定义属性的函数。因此,此处作为计数器的类型转换告诉typescript“这可能不是类型安全的,但无论如何请将此函数视为计数器。”

这样,您就可以右键访问仅在假定该函数为
计数器时才存在的属性。但是,这也可能掩盖其他类型错误,例如函数的返回类型错误



总之,没有抛出类型错误的原因是,当您使用
as
时,您告诉typescript您比编译器更了解,因此一些类型错误被抑制。

我不擅长Python,但是
(start:number)
我觉得您可能需要在数字如下所示的位置放置一个数字
(开始:1)
。这是您目前使用的脚本吗?您是否有原始布局和编辑版本。您能否举例说明您的目标是什么1.欢迎使用SO。2.请以文本形式而不是图像形式发布代码。(如果是TS,最好添加游乐场链接)3.计数器是一个调用签名。请参见4.提供的代码尝试使用类型断言创建计数器的输入。5.由于初始函数返回未定义而不是字符串,因此无法创建计数器。6.错误被类型断言掩盖。“但编译器不会抛出任何错误”--
as
类型强制转换不是绝对类型安全的,在某些情况下(如这样),它可能会导致问题。(
as type
)有一些用例。这不是一个。您应该创建一个实现接口的类,并创建该类的一个实例,而不使用类型断言。“这可能不是类型安全的,但无论如何请将此函数视为计数器。”这很有趣。如何将未定义的函数返回视为计数器的实例?因此,使用as关键字,typescript会忽略错误,但变量计数器仍然是未定义的函数返回?