Typescript 如何从字符串或字符串数组属性推断类型
鉴于以下情况:Typescript 如何从字符串或字符串数组属性推断类型,typescript,Typescript,鉴于以下情况: 类型动作= |{type:'FOO'} |{type:'BAR'} 类型规则={ 目标:字符串|字符串[], 结果:(动作:动作)=>无效 } 常量规则1:规则={ 目标:“FOO”, 结果:action=>console.log(action)/{type:'FOO'} } 常量规则2:规则={ 目标:['FOO','BAR'], 结果:action=>console.log(action)/{type:'FOO'}|{type:'BAR'} } 可以调度操作(例如使用red
类型动作=
|{type:'FOO'}
|{type:'BAR'}
类型规则={
目标:字符串|字符串[],
结果:(动作:动作)=>无效
}
常量规则1:规则={
目标:“FOO”,
结果:action=>console.log(action)/{type:'FOO'}
}
常量规则2:规则={
目标:['FOO','BAR'],
结果:action=>console.log(action)/{type:'FOO'}|{type:'BAR'}
}
可以调度操作(例如使用redux),规则可以对其作出反应。当目标匹配action.type时,结果将与匹配的操作一起执行
问题
我希望规则结果推断出正确的类型。这可以通过目标来实现。但我不知道怎么做。我目前的做法是:
类型规则={
目标:字符串|字符串[],
结果:(动作:动作)=>无效
}
常量规则:规则=。。。
但我需要一种写作的方式
const规则:规则=。。。
而正确的类型是通过规则target推断出来的,这是我能找到的最好的。您必须放弃将
target
作为单个值,并始终依赖它作为数组,即使该数组只有一个元素。也许有一种方法可以让它在函数重载下工作,但我无法让它工作
type ActionType=“FOO”|“BAR”;
类型Action={type:T};
函数createRule(目标:T){
返回{
目标,,
结果:(action:action)=>console.log(action)
};
}
const foo=createRule([“foo”]);
const bar=createRule([“FOO”,“bar]”);
结果({type:“foo”});
foo.result({type:'BAR});//不
结果({type:“FOO”});
结果({type:“bar”});
结果({type:“BAZ”});//不
通过使用函数创建规则,您可以使用泛型,而无需在每次创建新规则时将其指定为类型和值来重复自己的操作。这是我所能想到的最好的方法。您必须放弃将
target
作为单个值,并始终依赖它作为数组,即使该数组只有一个元素。也许有一种方法可以让它在函数重载下工作,但我无法让它工作
type ActionType=“FOO”|“BAR”;
类型Action={type:T};
函数createRule(目标:T){
返回{
目标,,
结果:(action:action)=>console.log(action)
};
}
const foo=createRule([“foo”]);
const bar=createRule([“FOO”,“bar]”);
结果({type:“foo”});
foo.result({type:'BAR});//不
结果({type:“FOO”});
结果({type:“bar”});
结果({type:“BAZ”});//不
通过使用函数创建规则,您可以使用泛型,而无需在每次创建新规则时将其同时指定为类型和值来重复自己的操作。“我希望规则结果推断出正确的类型。这可以由目标以某种方式完成。”您能进一步解释吗?不太清楚你想要什么。给定什么输入类型,您期望什么输出类型?输入是动作,例如const action={type:'FOO'}。如果我的规则有target:'FOO'或target:['FOO'],那么结果应该从类型Action={type:'FOO'}{type:'BAR'}推断类型。因此,只有{type:'FOO'}应该保留“我希望规则结果推断出正确的类型。这可以由目标以某种方式完成。”您能解释一下吗?不太清楚你想要什么。给定什么输入类型,您期望什么输出类型?输入是动作,例如const action={type:'FOO'}。如果我的规则有target:'FOO'或target:['FOO'],那么结果应该从类型Action={type:'FOO'}{type:'BAR'}推断类型。所以只有{type:'FOO'}应该保留