#typescript #visual-studio-code #intellisense
#typescript #visual-studio-code #intellisense
Вопрос:
vscode intellisense не работает, когда типы объединения имеют символьный и строковый тип.
type t = 't1' | 't2';
var a: t = 't1';
type t = 't1' | 't2' | string;
var a: t = 't1';
пример: https://imgur.com/n1Q7aNl
Комментарии:
1. Во втором случае тип
t
эквивалентенstring
(литеральные типы поглощаются их супертипом), так чего же вы ожидали от IntelliSense?2. @Cerberus у этой проблемы на самом деле есть достойный обходной путь, нередко допускается любой
string
, но есть набор общих строк, которые вы хотели бы предложить.
Ответ №1:
Typescript упрощает объединения и пересечения. Одним из таких упрощений является то, что базовые типы поглощают подтипы. string
является базовым типом всех типов строковых литералов (таких как 't1'
и 't2'
). Это означает, что для компилятора это type t = 't1' | 't2' | string;
просто причудливый способ записи string
.
Эта проблема на GitHub документирует именно эту проблему, и предлагаемое обходное решение должно сработать и для вас:
type t = 't1' | 't2' | (string amp; { fromT?: any});
var a: t = 'ty'; //ok
var a: t = 't2'; //ok, with autocomplete