Нет, это не ошибка. Здесь вы можете проверить, что вы вызываете, когда выполняете что-то вроде petNames[1]
или petNames['two']
. Внутри Dart принимает значение в квадратных скобках как Object
, потому что вы используете оператор []
.
Когда вы проверяете определение Map , вы видите, что оно определено как Тип Generi c (с параметрами K
и V
). Например, когда вы назначаете какое-то значение некоторой клавише на этой карте:
petNames[Animal.Bird] = 'New Bird Name'
Вы используете оператор []=
, и этот оператор вызывает функцию isValidKey()
, чтобы проверить, является ли клавиша (Animal.Bird
в пример) имеет тип K
(Animal
), а значение ('New Bird Name'
в примере) имеет тип V
(String
).
Но функция isValidKey()
не вызывается при использовании оператора []
.
Таким образом, как и в Dart, все является объектом, а оператор []
получает в качестве ввода Object
, когда вы звоните petNames['two']
, Дарт попытается найти этот ключ, даже если он не имеет типа K
.
Для получения дополнительной информации, пожалуйста, проверьте ссылки выше и эту проблему на Dart Lang SDK.