Как проверить тип в typescript repl (ts-node)?

#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. Я ожидаю, что появится что-то вроде этого: Утка <Тип машинописного текста> { цвет: строка; перья: число}