通过泛型语句,javascript的不同回报

时间:2018-01-23 10:56:00

标签: javascript typescript generics types

是否可以通过通用语句返回不同的值?

示例:

//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' }

1 个答案:

答案 0 :(得分:0)

//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中的代码没有任何线索,预计会返回ObjectObject[]。你必须通过论证告诉它。

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

在函数中,您可以通过简单的Array.isArray(arg)

确定返回类型