gpt4 book ai didi

typescript - 如何允许 Typescript Generic 参数具有默认值

转载 作者:行者123 更新时间:2023-12-05 02:27:52 26 4
gpt4 key购买 nike

我正在尝试为 TS 中的通用函数设置默认值。这是一个简单的例子:

type Size = "small" | "medium" | "large";
type Detail<S extends Size> = S extends "small" ? "noDetail" : S extends "medium" ? "partialDetail" : "fullDetail"

function getDetail<S extends Size>(size:S = "small"):Detail<S>{
if(size === "small")
return "noDetail" as Detail<S>;
if(size === "medium")
return "partialDetail" as Detail<S>
return "fullDetail" as Detail<S>;
}

它导致错误:

Type '"small"' is not assignable to type 'S'.
'"small"' is assignable to the constraint of type 'S', but 'S' could be instantiated with a different subtype of constraint 'Size'.ts(2322)

我理解这个问题(例如:有人可以尝试 getDetail<"large">(); )并且我已经阅读了一些关于 SO 的帖子来尝试解决。

但是,

  1. 我不想强制人们传递参数。
  2. 我要返回条件类型(不是无约束字符串,不是联合)

我怎样才能做这样的事情?

最佳答案

最好用函数重载来完成

function getDetail(): Detail<"small">;
function getDetail<T extends Size>(size: T): Detail<T>;
function getDetail(size: Size = "small"): Detail<Size>{
if(size === "small")
return "noDetail";
if(size === "medium")
return "partialDetail";
return "fullDetail";
}

Playground link

关于typescript - 如何允许 Typescript Generic 参数具有默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72860741/

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