如何编写函数fn
以匹配类型DescribableFunction
type DescribableFunction = {
description: string;
(arg: string): number;
new (someArg: number): string
};
function doSomething(fn: DescribableFunction) {
console.log(`${fn.description} returned ${fn('lorem')} or ${new fn(1)}`);
}
const fn: DescribableFunction = function (arg: string) {
}
doSomething(fn)
没有类型断言是不可能的。
由于历史原因,JavaScript中的一些构造函数可以用new
关键字调用,也可以作为常规函数调用,例如Date
或Array
。
这些构造函数是内建的。不允许在没有类型断言的情况下构建这样的构造函数。但是,您可以在DescribableFunction
中去掉new (someArg: number): string
,只添加description
属性:
type DescribableFunction = {
description: string;
(arg: string): number;
};
function doSomething(fn: DescribableFunction) {
console.log(`${fn.description} returned ${fn('lorem')} or ${new fn(1)}`);
}
const fn: DescribableFunction = function (arg: string) {
return 42
}
fn.description = ''
doSomething(fn)
在这里你可以找到更多关于函数静态属性的解释。
在这里你可以找到相关的问题/答案
注:请记住,您可以在纯js中创建具有类似行为的自定义构造函数(参见new.target)