javascript - 如何使用 TypeScript 中的其他函数修复“未知”函数值
问题描述
我有一个主要功能来完成所有处理,许多其他方法将使用它。
然而,唯一的问题是,根据 TypeScript 编译器,“我不知道什么是未知的”。
async function main_function(url: string): Promise<unknown> {
// doComplexStuff();
const data = await fetch(url);
return data.json();
}
当我想修改这些函数的类型时,就会出现问题。
function req_1(url: string): Promise<something> { return main_function(url); }
function req_2(url: string): Promise<other> { return main_function(url); }
function req_3(url: string): Promise<blah_blah> { return main_function(url); }
据我所知,我可以使用函数语法上的类型参数或as
方式来做到这一点,但这些似乎更像是一种解决方法,也不是那么优雅。
解决方案
data.json()
返回 type any
,因此 Typescript 无法确定输出类型应该是什么,除非您明确告诉它。
那么你最好的选择是使用泛型,最好保护返回的类型,以确保它实际上是你所期望的。
async function main_function<T = unknown>(url: string): Promise<T> {
// doComplexStuff();
const data = await fetch(url);
return data.json();
}
function req_1(url: string): Promise<something> { return main_function(url); }
function req_2(url: string): Promise<other> { return main_function(url); }
function req_3(url: string): Promise<blah_blah> { return main_function(url); }
请注意,您不必指定main_function<something>
,因为 Typescript 可以根据 req 函数 ( Promise<something>
) 的预期结果推断出它。
正如我所提到的,最好检查结果是否也是正确的类型,例如:
function req_1(url: string): Promise<something> {
const result = main_function(url);
if (/* result is something */) {
throw new Error('Got a response that was not of type \'something\'')
}
return result
}
推荐阅读
- sql-server - 使用sql server在单行中显示表的对角行元素
- sql-server - SQL Server 返回一些 unicode 字符的问号
- python - How can I use a dispatcher middleware on flask?
- ruby-on-rails - 根据包含在另一个 json 字段中的字段值选择记录
- python - ValueError:检查目标时出错:预期dense_14有2维,但得到的数组形状为(144、11、1756)
- powershell-2.0 - 无法调用 System.Version 的 Parse 方法
- html - 如何使用 CSS 相对定位来允许添加两行信息并对齐
- r - 安装特定 R 包时出错
- php - 是否有一个内置的 php 字符串函数可以返回两个字符串不同的第一个位置?
- aws-lambda - Remove Uploaded zip file from lambda function