gpt4 book ai didi

typescript - 通用参数限制为非数组

转载 作者:行者123 更新时间:2023-12-04 02:27:10 24 4
gpt4 key购买 nike

有没有办法说方法的传递类型参数不能是数组??

示例类

class A {
public f<T /*which is not array*/>(obj: T) { /* ... */ }
}

这段代码不会被编译:

const a = new A();

a.f<number[]>([42, 42]);

最佳答案

是的,有:

class A {
public f<T>(obj: T extends Array<any> ? never : T) { /* ... */ }
}

const x = new A();
x.f(1) // ok
x.f([]) // error
x.f([1]) // error

顺便说一句,TypeScript 中没有否定类型。例如,你不能这样写:not Array<any>!Array<any> , 但 TS 有条件类型。

在我的示例中,我返回了 never如果参数是数组。

这是什么意思?

这意味着,TS 会期待与 never 的一个参数类型。

诀窍是,您无法生成 never按字面输入。

您可以创建自己的否定类型:

type Not<T,  R> =  R extends T ? never: R;

谢谢@Eldar!

关于typescript - 通用参数限制为非数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66745644/

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