#typescript #ts-node
#typescript #ts-node
Вопрос:
Итак, я ввел следующее
type Duck = {
colors: string;
featheres: number;
}
type DuckProps = keyof Duck
как мне проверить / проверить, что, например DuckProps
, имеет значение: 'colors' | 'feathers'
?
Кажется, я не могу запустить журнал консоли или использовать его, поскольку он просто вернет
[eval].ts:8:7 - error TS2693: 'DuckProps' only refers to a type, but is being used as a value here.
Как вы взаимодействуете с конкретными конструкциями typesript (интерфейс, тип и т. Д.) Через repl? Другими словами, когда я печатаю Duck. Я ожидаю, что что-то появится вот так:
$ Duck
Duck<Typescript type> { color: string; feathers: number }
Ответ №1:
Вот немного взлома, но он выполняет свою работу. Используя .type
команду, мы можем принудительно преобразовать интересующий нас тип в оператор и получить ts-node
доступ к отображению быстрой информации, связанной с ним.
> type Duck = {
... colors: string;
... featheres: number;
... }
undefined
> type DuckProps = keyof Duck
undefined
> .type _ as DuckProps
type DuckProps = "colors" | "featheres"
Предостережение: это работает только с именованными типами в конце. Что происходит внизу, так это то, что .type
вызывает typescript getQuickInfoAtPosition
с позицией в конце ввода. Например, наведите курсор мыши на typescript playground, и эта нижняя серая строка — это то, что отображается в дополнение к некоторой документации к нему.
Это кажется полезной функцией ts-node и может потребовать запроса функции.
Комментарии:
1. Мило! просто примечание для других: если DuckProps — это не вещь, то отобразится командная
any
строка. Спасибо!
Ответ №2:
keyof Duck не даст вам тип, только значение, вы должны использовать:
пусть duckProps = ключ Утки;
Ответ №3:
Я предполагаю, что вы хотите убедиться, что никто не будет использовать тип Duck
с несуществующими именами свойств. В приведенном ниже примере кода я проверяю, что свойство действительно существует Duck
, и оно имеет правильный тип:
type Duck = {
colors: string;
featheres: number;
}
function doStuff<T, P extends keyof T>(
property: P,
value: T[P],
obj: T) {
// Do something
}
const myDuck = {
colors: "red",
featheres: 123
};
doStuff('colors', 'red', myDuck);
doStuff('featheres', 100, myDuck);
doStuff('colors', 123, myDuck); // error: the value of the wrong type
doStuff('colours', 'red', myDuck); // error: misspelled prop name
Комментарии:
1. Не совсем, я хочу
repl
и получаю отзывы из командной строки о том, что это за типы. Поэтому, когда я набираю Duck. Я ожидаю, что появится что-то вроде этого: Утка <Тип машинописного текста> { цвет: строка; перья: число}