如何根据参数字符串定义 return 类型?流量类型 javascript
How to define a type of return based on an argument string? Flowtype javascript
例如我得到这个 fn:
const aCar = {type: 'car', wheels: 4};
const aBike = {type: 'bike', wheels: 2};
const fn = (type:'a'|'b'):Car|Bike => {
if(type === `a`) return aCar;
if(type === `b`) return aBike;
}
问题是 return 总是 Bike
或 Car
独立于类型。我想强制执行,当类型为 a
时,return 始终为 Car
类型,而当 b
类型为 Bike
.
这可能吗?
某事very close:
// @flow
const items = [1, 2, 3];
type FirstType = ((_: 'a') => number) & ((n: 'b') => Array<number>);
const first: FirstType = (n):any => {
if (n === "a") {
return items[0];
} else if(n === 'b') {
return items;
}
}
const a: number = first('a');
const b: Array<number> = first('b');
谢谢
我找到了一种方法来使用这段代码完成我需要做的事情。重载函数然后使用参数作为对象来定义return。是相当不错的解决方案,但可能会更好。
注意:formatNotification
的参数只能是一个对象,不能像formatNotification(type, data)
.
这样的2个参数
仍然不是一个很好的解决方案,但半途而废。
以及类型:
例如我得到这个 fn:
const aCar = {type: 'car', wheels: 4};
const aBike = {type: 'bike', wheels: 2};
const fn = (type:'a'|'b'):Car|Bike => {
if(type === `a`) return aCar;
if(type === `b`) return aBike;
}
问题是 return 总是 Bike
或 Car
独立于类型。我想强制执行,当类型为 a
时,return 始终为 Car
类型,而当 b
类型为 Bike
.
这可能吗?
某事very close:
// @flow
const items = [1, 2, 3];
type FirstType = ((_: 'a') => number) & ((n: 'b') => Array<number>);
const first: FirstType = (n):any => {
if (n === "a") {
return items[0];
} else if(n === 'b') {
return items;
}
}
const a: number = first('a');
const b: Array<number> = first('b');
谢谢
我找到了一种方法来使用这段代码完成我需要做的事情。重载函数然后使用参数作为对象来定义return。是相当不错的解决方案,但可能会更好。
注意:formatNotification
的参数只能是一个对象,不能像formatNotification(type, data)
.
仍然不是一个很好的解决方案,但半途而废。
以及类型: