Typescript 编写一个类型安全函数,该函数接受任意对象并生成CSV字符串

Typescript 编写一个类型安全函数,该函数接受任意对象并生成CSV字符串,typescript,Typescript,所以我试图用TypeScript编写一个函数,它接受一个任意的PDO(定义为接口),并输出一个CSV字符串(是的,我知道我可能可以找到库来实现这一点,但我找到的库并不能真正满足我的需要,我喜欢写这样的东西) 为了键入输入参数,我首先创建了一个映射类型,如下所示: 接口任意对象类型{ [键:字符串]:未知 } 但是,当我尝试将其用作输入参数时,函数不会接受我的PDO(这是一个最小的示例,不是我的真实代码,因此名称显然是虚构的): 接口任意对象类型{ [键:字符串]:未知 } const gene

所以我试图用TypeScript编写一个函数,它接受一个任意的PDO(定义为
接口
),并输出一个CSV字符串(是的,我知道我可能可以找到库来实现这一点,但我找到的库并不能真正满足我的需要,我喜欢写这样的东西)

为了键入输入参数,我首先创建了一个映射类型,如下所示:

接口任意对象类型{
[键:字符串]:未知
}
但是,当我尝试将其用作输入参数时,函数不会接受我的PDO(这是一个最小的示例,不是我的真实代码,因此名称显然是虚构的):

接口任意对象类型{
[键:字符串]:未知
}
const generateCsvFromDomainPdo=(thing:ArricryObjectType):string=>{
//还没有代码,但最终将输出CSV字符串
};
接口域PDO{
foo:string;
}
常数条:域PDO={
foo:“baz”
};
generateCsvFromDomainPdo(bar);/*错误:“DomainPdo”类型的参数不可分配给参数
类型为“任意对象类型”*/
现在我突然想到,我能做的最安全的事情可能是将参数键入为
未知
,这将迫使函数代码本身在实际使用它之前进行一些自定义类型检查(自定义类型保护等)

但我想知道是否有一个中间地带(可能使用某种通用函数技巧)允许我传入
接口
对象(如上面的
域PDO
),然后在函数内部为我提供一个参数:

  • 可以传递到
    对象。键(…)
  • 可以使用对
    Object.keys(…)

您没有共享ArbitraryObjectPdo@captain-yossarian抱歉。打字错误-这意味着是
任意objecttype
。我已经更新了问题:)您希望在
[key:string]:unknown
中使用哪些值类型而不是unknown?一切可能吗?我的意思是,数组、符号、函数还是只能序列化?我认为
unknown
是一种合理的值类型-我很乐意在那里进行类型检查。我在问我如何才能在不将整个内容作为
unknown
传递的情况下完成这项工作。那么,作为
Object.keys(thing)
的结果,您希望得到什么类型的函数返回类型?您没有共享ArbitraryObjectPdo@captain-yossarian抱歉。打字错误-这意味着是
任意objecttype
。我已经更新了问题:)您希望在
[key:string]:unknown
中使用哪些值类型而不是unknown?一切可能吗?我的意思是,数组、符号、函数还是只能序列化?我认为
unknown
是一种合理的值类型-我很乐意在那里进行类型检查。我想问的是,如何在不将整件事作为
unknown
传入的情况下实现这一点。那么,作为
Object.keys(thing)
的结果,您期望的函数返回类型是什么?