FS0001: ошибка при добавлении уравнения типа
Это сообщение присваивается, если значение определяется типом, который не объединяется с ожидаемым типом.
Следующий код демонстрирует простую версию ошибки:
let booleanBinding: bool = 10
Этот код приводит к следующим выходным данным:
error FS0001: This expression was expected to have type
'bool'
but here has type
'int'
Здесь требуется bool
тип заметки booleanBinding
типа. Однако значение 10
выводится для определения int
. Так как int
сообщение не bool
совпадает с данным сообщением.
Это сообщение может быть выдано во многих различных обстоятельствах, и все они следуют этому же шаблону. Вывод типа (или заметки с заданным программистом типа) "исправляет" тип функции или значения определенного типа, а затем затем этот тип используется так, как если бы он был другим типом, чем "фиксированный". Следующий код демонстрирует более сложную версию ошибки, где вывод между функциями приводит к возникновению ошибки далеко от места ожидания:
// this function has type `int -> int`.
// `+` takes the type of the arguments passed to it, and `1` is of type `int`, so
// `+` must be of type `int -> int`
let addOne i = i + 1
// this function has type `int -> int`, which may be surprising because no types are explicitly specified.
// the `printfn` call on the first line is of type `'a -> unit`, because `printfn "%A"` takes a value of any type and returns unit.
// this means that the type of the `i` parameter hasn't yet been decided based on how the parameter is used.
// the `addOne` call on the second line is of type `int -> int`, because `addOne` is of type `int -> int` (see above).
// this means that `i` _must_ be of type `int`, so the overall type signature of `printThenAdd` is inferred to be `int -> int`
let printThenAdd i =
printfn "%A" i
addOne i
// this line triggers the error
// > This expression was expected to have type
// > 'int'
// > but here has type
// > 'string'
// because `printThenAdd` has been inferred to have type `int -> int`, but a string was passed in as the `int` parameter
printThenAdd "a number"
|> ignore
Чтобы решить это сообщение, необходимо изменить одну из двух частей привязки: заметку типа или привязку значения.
Если значение правильно, измените или удалите заметку типа.
Если заметка типа правильна, проверка привязанное значение и убедитесь, что ошибки логики не были сделаны.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по