vscode intellisense не работает, когда типы объединения имеют символьный и строковый тип

#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