gpt4 book ai didi

typescript - 如何根据通用输入类型返回类型?

转载 作者:行者123 更新时间:2023-12-05 03:39:35 25 4
gpt4 key购买 nike

我正在为 fetch 编写一个包装器。我想为所有 CRUD(发布、获取、更新、删除)操作创建一个通用函数。 GET 请求返回一些数据,而 DELETE 请求可能不返回任何数据。

function fetchIt<T>(path: string, init?: RequestInit | undefined): T {
// really use fetch
// ...
// if T is not provided return null
//
// if T is given return a value of type T

return {} as T
}

interface User {
name: string
}

// getResult should be of type User because we provided User as input type
const getResult = fetchIt<User>('/users/1')

// deleteResult should be null because we did not provide any input type
const deleteResult = fetchIt('/users')

这里是 playground 的链接.

我不想返回 T | null 因为那时我总是必须检查结果是否为 null。

// this is not what I want
function fetchThis<T>(): T | null {
return null
}

const a = fetchThis()
const b = fetchThis<User>()

if (b !== null) {
console.log(b)
}

每当我不提供泛型类型时,我都希望得到 null,而每当我提供类型时,它应该是返回值。

有什么想法吗?非常感谢!

最佳答案

当调用者未手动指定时,您可能希望 T 本身为 null。如果是这样,您可以使用 generic parameter default使用 = 语法:

function fetchIt<T = null>(path: string, init?: RequestInit | undefined): T {
return {} as T; // unsafe assertion, but so is fetch() I guess so 🤷‍♂️
}

这为您提供了您所要求的行为:

const getResult = fetchIt<User>('/users/1');
// const getResult: User
const deleteResult = fetchIt('/users');
// const deleteResult: null

Playground link to code

关于typescript - 如何根据通用输入类型返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68490062/

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