流使用泛型输入值数组

时间:2018-10-31 04:37:04

标签: javascript typescript flowtype

以下代码

x = [45, -1, 0, 54, 101, 2, 7,11]
x = sortList(x)

print(x)
print(median(x))

我想遍历type Value<T> = {| name: string, value: T, |} const myNumber: Value<number> = { name: 'number', value: 1 }; const myString: Value<string> = { name: 'string', value: 'foo' }; const arr: Array<Value> = [myNumber, myString]; 对象的数组并获取我所有对象的Value值,但是我遇到了这个错误:

name

有什么想法可以在不使用9: const arr: Array<Value> = [myNumber, myString]; ^ Cannot use `Value` [1] without 1 type argument. References: 1: type Value<T> = {| ^ [1] 的情况下解决此问题?我正在使用Value<any>

流程游乐场link

3 个答案:

答案 0 :(得分:2)

您需要为数组项类型指定type参数

type Value<T> = {|
  name: string,
  value: T,
|}

const myNumber: Value<number> = { name: 'number', value: 1 };
const myString: Value<string> = { name: 'string', value: 'foo' };

const arr: Array<Value<any>> = [myNumber, myString];

根据您要严格的程度,您还可以使用具有联合类型的数组作为项

 const arr: Array<Value<number>|Value<string>> = [myNumber, myString];

或元组类型:

const arr: [Value<number>,Value<string>] = [myNumber, myString];

您还可以跳过注释,让编译器推断类型。

答案 1 :(得分:2)

更新 在最新版本(经过0.98.0测试)中,流程能够正确推断类型,因此不再需要显式注释。随便去吧

const arr = [myNumber, myString];

旧版本:

在流程中,您可以使用Existential Type (*)

  

存在类型用作占位符以告诉Flow推断类型

const arr: Array<*> = [myNumber, myString];

Playground

答案 2 :(得分:0)

我最终使用了它,因为我真的不需要知道value的类型。

type Value<T> = {|
  name: string,
  value: T,
|}

const myNumber: Value<number> = { name: 'number', value: 1 };
const myString: Value<string> = { name: 'string', value: 'foo' };

const arr: Array<{name: string}> = [myNumber, myString];

Playground Link