【问题标题】:Different return by generics statements, javascript泛型语句的不同返回,javascript
【发布时间】:2018-07-02 04:04:15
【问题描述】:

有没有办法通过通用语句返回不同的值?

例子:

//How should i write function, which will be used as follows?:
type FooType<T> = T | T[]
let baz: FooType<Object[]> = Foo<Object[]>('bar') // returns: [{bar: 'bar'}]
let bazbar: FooType<Object> = Foo<Object>('bar') // returns: { bar: 'bar' }

【问题讨论】:

  • 您不能根据泛型类型返回不同的值。您需要针对每种情况提供不同的输入。
  • @GorkaHernandez,感谢您的帮助。我会尝试输入参数

标签: javascript typescript generics types


【解决方案1】:
//How should i write function, which will be used as follows?:
type FooType<T> = T | T[]
let baz: FooType<Object[]> = Foo<Object[]>('bar') // returns: [{bar: 'bar'}]
let bazbar: FooType<Object> = Foo<Object>('bar') // returns: { bar: 'bar' }

你不能。 TypeScript 中的类型只是代码之上的另一层。代码不知道这些类型。只有编译器会检查您编写的代码是否与您添加的类型匹配。

因此,函数 Foo 中的代码不知道它应该返回 Object 还是 Object[]。你必须通过论据来告诉它。

Foo&lt;Object[]&gt;(['bar']) 怎么样?这应该尽可能简单。
你传递一个数组,你得到一个数组。

并且在函数中你可以通过一个简单的Array.isArray(arg)来判断返回类型

【讨论】:

  • 感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多