Специальное Использование Дженериков В Typesript

#node.js #typescript #generics

Вопрос:

У меня есть interface такой:

 interface TestInterface {
  foo: string;
  bar: boolean;
}
 

И я написал такую функцию:

 function test<T, K extends keyof T = keyof T>(param: K, param2: T[K]) {
  ...
}
 

Я хочу, когда я использую эту функцию, как показано ниже:

 test<TestInterface, 'amp;amp;amp;'>('amp;amp;amp;', false);
 

когда я печатаю, предложите TestInterface мне ключи вместо обоих amp;amp;amp; , и если я выбрал bar , то param2 укажите тип boolean .

Как я должен получить такой результат?

Комментарии:

1. Это вопрос о «списке завершения» IntelliSense, но я не совсем понимаю, когда вы хотели бы видеть ключи TestInterface к предложенному. Это происходит, когда вы вводите спецификацию параметра второго типа? Если это так, я не думаю, что такая функция существует, и вам, возможно, лучше разделиться test() на функцию карри , которая принимает T и возвращает другую функцию, которая делает вывод K подобный этому . Если это сработает для вас, я, возможно, смогу ввести ответ; в противном случае, пожалуйста, сообщите мне, чего не хватает.

2. Я хочу, чтобы параметр второго типа, соответствующий первому, был ограничен при выборе параметра первого типа

3. Я имею в виду, что если я выбрал foo в качестве первого параметра, то вторым просто foo не будет ничего другого

4. Есть два параметра типа и два параметра функции.. о каких «первых» и «вторых» вы говорите? Обратите внимание, что он «ограничен», так как приведенный выше код выдает ошибку компилятора , которая сообщает вам, что вы сделали не так. Часть об IntelliSense я все еще не понимаю, и вы, возможно, захотите показать скриншот или что-то, что демонстрирует, что вы видите и чего не видите (это может быть один из немногих случаев, когда необходимы изображения)

5. Извините, в моем вопросе у меня есть два amp;amp;amp; знака, хорошо? Я хочу , чтобы, когда я выбрал первое amp;amp;amp; как foo , второе amp;amp;amp; foo тоже было. С другой стороны, я хочу, чтобы эти клавиши предлагались при вводе текста.