英文:
Typescript generic type but not string or any
问题
我有一个通用函数,看起来像这样:
private getItem<T>(identifier: string): T {...}
现在我想将其更改,以使返回类型可以是任何对象或数组,但不是任意类型,也不是字符串。我不确定如何实现这一点。
英文:
I have a generic function that looks like this:
private getItem<T>(identifier: string): T {...}
Now I want to change this, so that the return type can be any object or array, but not any and also not string. I'm unsure how to achieve that.
答案1
得分: 2
以下是翻译的内容:
如果您想禁止使用 any
,则需要一些魔法。使用来自 这个问题 的类型来检查 any
,然后我们可以使用类似以下的东西:
type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N;
declare function foo<T extends IfAny<T, never, object>>(): T;
如果 T
是 any
,那么约束是 never
,否则约束是 object
。
英文:
If you want to disallow the use of any
, you'll need a little more magic. Using a type from this question to check for any
, we can then use something like
type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N;
declare function foo<T extends IfAny<T, never, object>>(): T;
If T
is any
, then the constraint is never
, otherwise, the constraint is object
.
答案2
得分: 0
T extends object
可以用于对象和数组,但不适用于基本类型和 any:
private getItem<T extends object>(identifier: string): T {...}
英文:
T extends object
can be use for objects and arrays, but not primitives and any:
private getItem<T extends object>(identifier: string): T {...}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论