Хорошо.
Решением было добавить "esModuleInterop": true
к моему tsconfig.json
.
Кроме того, "allowSyntheticDefaultImports": true
позволил мне написать import React from "react";
вместо import * as React from "react";
.
Спасибо всем.
Еще некоторые детали из MSDN:
Префикс включает использование ключевых слов как идентификаторы, которое полезно при взаимодействии через интерфейс с другими языками программирования. Символ не является на самом деле частью идентификатора, таким образом, идентификатор мог бы рассматриваться на других языках как нормальный идентификатор без префикса. Идентификатор с префикс называют дословным идентификатором. Использование префикс для идентификаторов, которые не являются ключевыми словами, разрешается, но сильно препятствуется как стиль.
из спецификации языка C#: 2.4.2 Идентификаторы.
Добавление префикса поэтому позволяет, например, произойти из класса, названного "делегатом", который мог бы быть определен в библиотеке, записанной на другом языке, чем C#.
В любом другом случае я не рекомендовал бы использовать этот синтаксис и скорее составить идентификаторы, отличающиеся от ключевых слов C# (например, valu вместо значения), чтобы увеличить удобочитаемость кода и избежать беспорядка, существует ли какое-либо особое значение, присоединенное к нему.
Существует также другой интересный факт об именовании переменной, упомянутом там:
Идентификаторы, содержащие два последовательных символа подчеркивания (U+005F), резервируются для использования реализацией. Например, реализация могла бы обеспечить расширенные ключевые слова, которые начинаются с двух символов нижнего подчеркивания.
"@delegate" должен дифференцировать имя переменной от ключевого слова "делегата".