TypeScript:应用于所有对象的Factor out函数';s属性
假设我们有一些泛型函数TypeScript:应用于所有对象的Factor out函数';s属性,typescript,Typescript,假设我们有一些泛型函数 function change<T>(something: T): IWhatever<T> {} 我能做一个更简单的物体吗 const stuff = { key1: change(1), key2: change('hello'), key3: change(false) } const stuff = { key1: 1, key2: 'hello', key3: false } 并通过适
function change<T>(something: T): IWhatever<T> {}
我能做一个更简单的物体吗
const stuff = {
key1: change(1),
key2: change('hello'),
key3: change(false)
}
const stuff = {
key1: 1,
key2: 'hello',
key3: false
}
并通过适当的TypeScript输入,将简单的对象传递到某个函数中,该函数将吐出第一个对象?还假设简单的对象可以随时更改属性,“某些函数”仍然会生成适当的复杂函数
我想不出来,也不知道这是否可能。好吧,您可以通过使用
映射类型来实现这一点。您只需使用2种类型映射:
剥离IWhatever
对每个属性应用剥离操作
//一个奇怪的接口
接口IWhatever{
whut:T;
}
//一个奇怪的函数,它将所有东西都封装到这个奇怪的接口中
函数更改(something:T):IWhatever{return{whut:something};}
//定义所有属性的常规类型必须是IWhatever类型
类型Whatevered={
[key in keyof R]:我曾经
}
//这个对象适合我们上面定义的类型
常数stuff={
关键1:更改(1),
键2:更改(“你好”),
键3:更改(错误)
}
//这张地图显示了IWhatever类型
类型UnWhateverify=T扩展IWhatever?R:T;
//这会将strping应用于对象的所有属性
类型清理器={[Key in keyof T]:UnWhateverify}
//此函数是一个演示类型操作的伪(魔术)函数
功能MagicJhonson(项目:T):清洁剂{
让cleansed={}如任何;
//在这里打扫卫生
用于(让输入项)
cleaned[key]=item[key].whut;//常规类型定义'Whatevered'使其有效
//你也可以跳过它,在这里对任何动作进行一些强制转换。
以清洁剂的形式返回;
}
const cleansedStuff=magicjonson(stuff);
console.log(cleansedStuff.key1)//编号
console.log(cleansedStuff.key2)//字符串
console.log(cleansedStuff.key3)//布尔值
//另一个用于反向应用操作的虚拟函数
功能JhonsonMagic(项目:T):涉及什么{
设whuts={}为任意值;
用于(让输入项){
whuts[关键]=变更(项目[关键])
}
返回whuts作为Whatevered;
}
const-oldStuff=JhonsonMagic(cleansedStuff);
console.log(oldStuff.key1)//whut:number
console.log(oldStuff.key2)//whut:string
console.log(oldStuff.key3)//whut:boolean
也许这会有帮助?不够具体。你的变化函数是可逆的吗?(你能从我曾经通过改变回到改变的论点上来吗?)有了这一点,我也能走相反的方向吗?从清理过的对象开始,以IWhatever'd对象结束?@ZeroSevenTen您只需要一个返回所有内容的函数。请参阅更新的答案。