在Typescript中构建条件类型
我正在尝试构建一个包含两个seq参数的curried函数。第一个是消息名,第二个是与特定消息相关的数据 我们有两种类型在Typescript中构建条件类型,typescript,typescript-typings,Typescript,Typescript Typings,我正在尝试构建一个包含两个seq参数的curried函数。第一个是消息名,第二个是与特定消息相关的数据 我们有两种类型 type One = { name: "OneMessage"; data: { name: string; } } type Two = { name: "TwoMessage"; data: { lastName: string; } } genericFN=message=>data=>{message:message,da
type One = {
name: "OneMessage";
data: {
name: string;
}
}
type Two = {
name: "TwoMessage";
data: {
lastName: string;
}
}
genericFN=message=>data=>{message:message,data:data}
当使用genericFN时,当我传递消息名时,让我们说
genericFNTwoMessage,它将返回一个函数,该函数将等待与该消息相关的特定数据,在本例中为{lastName:string}
我希望我能让自己明白
另外,对于那些能够清楚地看到我正在尝试做什么的人,请让我知道你将如何在头脑中处理这种情况,以想出解决方案
谢谢你们的时间。这可能是你们想要做的 Payload接口是示例中1和2的常见类型
interface Payload<TName extends string> {
name: TName;
data: DataType<TName>;
}
最后一步是为genericFN函数指定类型
const genericFN = <TName extends string>(message: TName) =>
(data: DataType<TName>): Payload<TName> =>
({ name: message, data });
现在,如果您声明一个函数具有类型GenericFunction,它将只接受类型为message one的参数 怎么样
type Messages = {
OneMessage: {
data: {
name: string
}
}
TwoMessage: {
data: {
name: string
}
}
}
const getFunction = <Name extends keyof Messages> (name:Name) => (data:Messages[Name]["data"]){
console.log(data)
}
将返回一个接受
{name:string}
这是一种有趣的方法,尽管如何声明genericFN functionRenan还不清楚,请检查我的新答案。我相信这可能会提供一个解决方案。请让我知道。嗨,本,谢谢你的回答,它非常适合我的用例!你把这个作为被接受的答案,我们都得到了分数:-哈哈,我真的以为我点击了被接受而不是向上投票。很抱歉。
// Messge Types
type One = {
readonly name: "OneMessage"
data: {
name: string,
},
}
type Two = DR<{
readonly name: "TwoMessage";
data: {
lastName: string;
}
}>
type Message = One | Two
// Functions
type GenericFunction<name extends Message["name"]> = (
name extends One["name"]? GFun<One> : GFun<Two>
)
type GFun <M extends Message> = (param:M) => unknown
type Messages = {
OneMessage: {
data: {
name: string
}
}
TwoMessage: {
data: {
name: string
}
}
}
const getFunction = <Name extends keyof Messages> (name:Name) => (data:Messages[Name]["data"]){
console.log(data)
}
getFunction("OneMessage")
{name:string}