有没有办法说方法的传递类型参数不能是数组??
示例类
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/