#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
тоже было. С другой стороны, я хочу, чтобы эти клавиши предлагались при вводе текста.