#typescript
#typescript
Вопрос:
Я не уверен, имеет ли это какой-либо смысл, потому что многие типы являются объектами в JavaScript, но здесь мы идем:
Я хочу реализовать защиту типа, которая проверяет, реализует ли тип подпись индекса. Как бы это сделать?
Другими словами, как реализовать тело этой функции:
function hasIndexSignature(o: complexunioninterface | { [index: string]: string }): o is { [index: string]: string } {
return /* Help? */;
}
Учитывая, что многие типы являются объектами, является ли правильная реализация этой:
function hasIndexSignature(o: complexunioninterface | { [index: string]: string }): o is { [index: string]: string } {
return typeof o === "object";
}
Одним из способов было бы реализовать защиту типа для complexunioninterface
и просто отрицать это, но мне интересно, будет ли иметь смысл реализация защиты типа для подписи индекса, и если это возможно.
Комментарии:
1. Вы, вероятно, не можете. Почему вы хотели бы знать что-то подобное? Можете ли вы отредактировать свой вопрос и добавить сценарий реального мира?
2. Возможно, вы сможете выполнить эту работу, используя API-интерфейс отражения метаданных, в зависимости от того, какую информацию о типе typescript автоматически аннотирует там (и средство защиты типов, которое проверяет его), но в остальном я с @NitzanTomer
3. Единственное, что отдаленно имеет смысл, это перечислить все свойства и проверить, является ли каждое из них строкой — это то
{ [index: string]: string }
, что в основном означает подпись индекса. Будет ли это достаточно хорошо, чтобы отличить от compexunioninterface или нет — я понятия не имею.4. Ну, я только начал изучать TypeScript. Я обнаружил, что пишу охранники для объединенного типа
headers?: HeaderInit | { [index: string]: string };
выборки узлов , чтобы информация о типе находилась внутри моихif
else
блоков и. В этом случае я просто написал защиту дляHeaderInit
, но, как я учусь, мне было любопытно, можно ли написать общую защиту для{ [index: string]: string }
и будет ли это иметь какой-либо смысл. Спасибо за ответы.
Ответ №1:
Мне интересно, будет ли иметь смысл реализовать защиту типа для подписи индекса и возможно ли это.
Защита пользовательского типа предназначена для случая, когда компилятор не может вывести расширенные знания, которые у вас есть об объектах.
Так что, на самом деле, вам решать, какой объем теста достаточен. Я бы сказал, придерживайтесь своей идеи implement a type guard for complexunioninterface and just negate that,