首页 > 解决方案 > 如何正确地将函数转换为可更新的

问题描述

当我尝试制作这样的功能new时:

01: interface Foo{}
02:
03: var Foo: new() => Foo = function(this: Foo): void {};

它会产生如下错误:

类型“ (this: Foo) => void”不可分配给类型“ new () => Foo”。
类型“ (this: Foo) => void”未提供与签名“ new (): Foo”的匹配项。

如果我将第 3 行更改为:

03: var Foo: new() => Foo = function(this: Foo): void {} as new() => Foo;

错误将变为:

类型 ' (this: Foo) => void' 到类型 ' new () => Foo' 的转换可能是一个错误,因为这两种类型都没有与另一种充分重叠。
如果这是故意的,unknown请先将表达式转换为 ' '。

但是,如果我将其转换为Function第一个,即

03: var Foo: new() => Foo = function(this: Foo): void {} as Function as new() => Foo;

不会发出任何错误。它也适用于铸造Function/ Date/ Error/ String/等。Constructor预先。

所以我的问题是为什么要投射到FunctionConstructors 使人们能够进一步投射到new() => Foo

另外,如果我想在中间转换中精确,中间类型的定义应该是什么?

标签: typescript

解决方案


推荐阅读