gpt4 book ai didi

javascript - Typescript - 如何在不使用 Exclude<> 的情况下从泛型类型中排除类型?

转载 作者:行者123 更新时间:2023-12-02 22:07:21 25 4
gpt4 key购买 nike

我有一个函数,可以通过字符串化不同的值将它们存储到本地存储中,并且我想限制该函数能够使用 Moment 对象。语法如下:

public static set<TValue>(
key: LocalStorageKeyEnum,
value: TValue,
...keySuffixes: string[]
) {
localStorage.setItem(
LocalStorage.buildKey(key, keySuffixes),
JSON.stringify(value)
)
}

问题是,如果第二个参数是 Moment 对象,并且我想在编写 <TValue> 时排除这种类型,那么该函数将毫无问题地工作。 。有没有办法使用 Typescript 来做到这一点,或者唯一的方法是在运行时运行检查?我可以使用两种类型,其中第二种类型是排除 Moment 类型的属性的类型,如下所示

type Variants = {
value: TValue,
date: moment.Moment
}

type ExcludeDate = Exclude {typeof Variants, "date"}

但我想知道是否还有其他方法可以做到这一点。谢谢你!我是 Typescript 的新手,所以如果我不太清楚,我很抱歉。

最佳答案

您可以按条件类型排除类型:

type MomentType = { x: string } // just an example simulation of moment

function set<TValue>(
key: string,
value: TValue extends MomentType ? never : TValue, // pay attention here
...keySuffixes: string[]
) {
// implementation
}

set('key', { x: 'a' }) // error as its the MomentType
set('key', { y: 'a' }) // ok as its not the MomentType

关键行是 value: TValue extends MomentType ?从不:TValue。我们说,如果传递的类型扩展了我们的 MomentType 那么该值的类型是 never,这意味着你不能向它传递值,因为 never 是空类型(没有从不的实例)。

MomentType 仅用于示例目的,它可以是您要排除的任何其他类型。

关于javascript - Typescript - 如何在不使用 Exclude<> 的情况下从泛型类型中排除类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59679177/

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