gpt4 book ai didi

TypeScript 函数返回函数集

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:08 25 4
gpt4 key购买 nike

我正在尝试将以下原始 JS 代码移植到 TypeScript 以更好地定义所有函数的返回类型。此代码导出单个函数 resource。调用时,resource 返回一个包含其他函数的对象。

在构造函数中初始化的 Demo 类中使用资源时,类型签名似乎消失了。一种方法是为 resource 定义一个接口(interface)。但是,我似乎无法为 resource 定义一个接口(interface),而不重复已经在 doThingOne() 中定义的参数doThingTwo()。我目前的尝试都导致我不得不复制签名。我应该如何处理这个问题以保持干燥?

function resource(someVar) {

function doThingOne(p1 = '') {
return Promise.resolve('thing one ' + someVar + p1);
}

function doThingTwo(p1 = '') {
return Promise.resolve('thing two ' + someVar + p1);
}

return {
doThingOne,
doThingTwo
};
}

class Demo {
resource1;

constructor() {
this.resource1 = resource('resource1');
}
}

const issues = new Demo();
issues.resource1 // no type information for resource1

最佳答案

基本上,您希望将成员键入为函数的结果类型。

最简单的方法是让编译器根据赋值推断它:

class Demo {
constructor(name: string, public resource1 = resource(name)) {

}
}

const issues = new Demo("resource1");
issues.resource1 // correct type

如果这不可行,您可以通过以下两种方式之一获取返回类型:

在 typescript 2.8 中

使用 ReturnType<T>条件类型。 (2.8 在撰写本文时尚未发布,但将于 2018 年 3 月发布,您可以通过 npm install -g typescript@next 获取)

class Demo {
public resource1: ReturnType<typeof resource>
constructor() {

}
}

2.8 之前

您可以使用辅助函数和虚拟变量从函数中提取类型:

// Dummy function, just used to extract the result type of the function passed as the argument
function typeHelper<T>(fn: (...p:any[]) => T): T{
return null as T;
}
// Dummy variable, null at runtime, but it's type is inferred as the result of the `resource function
let dummy = typeHelper(resource);

// Create a type definition based on the type of dummy
type resourceReturnType = typeof dummy;


class Demo {
public resource1: resourceReturnType
constructor() {

}
}

关于TypeScript 函数返回函数集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49085672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com