【发布时间】:2019-05-15 23:34:32
【问题描述】:
考虑以下场景:
我有一个函数createObj,它接受一个类型为ExampleType 的参数(它是对象),然后它创建具有属性def 的新对象,其中包含提供的对象。我希望它也返回类型,它包含与提供的完全相同的类型。看下面的例子:
type ExampleType = { aaa: string };
declare type MyFunc = <T>(obj?: ExampleType) => { def: O };
const myFunc: MyFunc;
const a = myFunc({aaa: 'name'});
现在它返回{ def: any },但我希望它返回提供的确切值-{ def: { aaa: 'name' } }。有没有机会这样做?或者更简单,看看这个:
const aObj = { a: true };
type aType = { a: true };
有没有办法让aObj 的类型等于aType?
编辑: 好的,我找到了问题的部分答案(基于此:Create TypeSafe Object literal based upon existing object in TypeScript)。
function myFunc<O>(keysAndValuesObj: O) {
return { def: keysAndValuesObj } as {
def: { [K in keyof typeof keysAndValuesObj]: K };
};
}
const a = myFunc({
aaa: 'abc'
});
// now variable a is type of { def: { aaa: 'abc' } }
我现在只需要将myFunc 参数设为ExampleType 的类型。我试图用ExampleType 类型扩展O,但没有成功......
【问题讨论】:
-
您的问题含糊不清,包含许多代码中未显示的元素。对于您的最终 sn-p,您是否尝试过
type aType = typeof aObj;? -
@ChristianIvicevic,是的,但它返回
{ a: boolean },我希望它返回{ a: true }
标签: typescript types literals