Можно ли это решить с помощью TypeScript? - PullRequest
0 голосов
/ 12 июля 2020

Я хочу определить некоторые типы TypeScript, чтобы функция func1 могла быть вызвана следующим образом:

func1<G3>("propOfG3", { propOfG1:"test" } )

Для этого я начал с определений некоторых типов. Я поставил два вопросительных знака (??) в той части, которую я не знаю, как определить:

type G1 = {
    propOfG1:string
}

type G2<A> = {}

type G3 = {
    propOfG3: G2<G1>
}

function func1<T>(name: keyof T, o: ?? ) {}

Второй параметр o функции должен иметь тип G1 (в в данном случае), потому что G1 является общим c параметром типа propOfG3 .

Может ли кто-нибудь помочь мне понять, как это можно определить?

РЕДАКТИРОВАТЬ: вот пример использования:

type Person = {
    surname:string
}

type Store<T> = {}

type Stores = {
    people : Store<Person>
}

function save<TStore>(name: keyof TStore, o:?? ) {}

//  call:

save<Stores>("people", { surname:"Laffer" })

1 Ответ

0 голосов
/ 13 июля 2020

Я не верю, что вы можете сделать это так просто, как вы заявили.

Ближайшее, что я думаю, вы можете получить, это следующее:

type Person = {
    surname:string
}

type Store<Person> = {}

type Stores = {
    people : Store<Person>
}

function save<TStores extends { [K in keyof TStores]: Store<T> }, T>(name: keyof TStores, o: T) {}

save<Stores, Person>("people", { surname:"Laffer" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...