javascript - 流可选类型参数

标签 javascript generics flowtype parameterized-types type-constructor

如何在类型构造函数中使用可选类型参数?下面,我希望 Fruit 类型构造函数根据是否传递 C 返回不同的类型:

type Color = 
  | 'yellow' 
  | 'orange'
  | 'red';

type Fruit<T, C> = {
           // ^ I wanna make this optional
  t: T,
  color: C, // <- should be optional if there's no C
};

type Orange = Fruit<'orange', Color>
type Apple = Fruit<'apple'>;

// √
const orange: Orange = { t: 'orange', color: 'orange' }; 

// Error: Cannot use `Apple` with less than 2 type arguments.
const apple: Apple = { t: 'apple' }; 

最佳答案

我认为我可以使用带有 empty 的默认类型来实现此目的,但我不确定这是否是最好的方法:

type Color = 
  | 'yellow' 
  | 'orange'
  | 'red';

type Fruit<T, C = empty> = {
  t: T,
  color?: C,
};

type Orange = Fruit<'orange', Color>
type Apple = Fruit<'apple'>;
type Banana = Fruit<'banana', number>;

const orange: Orange = { t: 'orange', color: 'orange' }; // √
const apple: Apple = { t: 'apple' };                     // √
const banana: Banana = { t: 'banana', color: 1 };        // √

关于javascript - 流可选类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48871045/

相关文章:

java - 怎么 ?与所说的对象不同?

javascript - Flow.js map 是不可写的吗?

javascript - 使用 C# 和 javascript 绑定(bind) html

javascript - JS::First Class Functions::参数值困惑

javascript - 改变对象值jquery

javascript - 流中的不相交联合不是 "disjointed"

javascript - 我可以在 React Storybook 中创建一个旋钮来修改具有 4 个值的数组,其中每个值都有一个选择下拉列表吗?

javascript - 使用 AJAX 登录与完整表单提交(重新加载完整页面)

java - 方法与类型中的另一个方法具有相同的删除

java - 通用二分搜索 - JAVA -