Рассмотрим следующий сценарий:
У меня есть функция 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
?
EDIT:
Хорошо, я нашел частичный ответ на мой вопрос (основываясь на этом: Создать литерал TypeSafe Object на основе существующего объекта в 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
. Я пытался расширить O
типом ExampleType
, но безуспешно ...