Typescript泛型类型,但不是字符串或任何类型。

huangapple go评论62阅读模式
英文:

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&lt;T&gt;(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;

如果 Tany,那么约束是 never,否则约束是 object

Playground

英文:

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&lt;T, Y, N&gt; = 0 extends (1 &amp; T) ? Y : N; 

declare function foo&lt;T extends IfAny&lt;T, never, object&gt;&gt;(): T;

If T is any, then the constraint is never, otherwise, the constraint is object.

Playground

答案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&lt;T extends object&gt;(identifier: string): T {...}

huangapple
  • 本文由 发表于 2023年2月8日 20:58:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/75386157.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定