Bs.deriving Абстрактная функция получения возвращает неопределенное значение при использовании заглавных имен
В примере документа bulescript для bs.deriving abstract вы можете получить свойство созданного вами объекта с помощью nameGet()
Это работает:
@bs.deriving abstract]
type person = {
name: string,
age: int,
job: string,
};
let joe = person(~name="Joe", ~age=20, ~job="teacher");
let name = nameGet(joe);
Если вы измените его на заглавную, как показано ниже, ваш сгенерированный получатель станет _NameGet()
:
type person = {
_Name: string,
age: int,
job: string,
};
let joe = person(~_Name="Joe", ~age=20, ~job="teacher");
let name = _NameGet(joe);
Во втором примере значение имени возвращается неопределенным. Как это можно исправить? пример в repl: tryreason
1 ответ
Решение
Используйте [bs.as] для псевдонима имени ключа. Это, очевидно, не изменит имя геттера, который останется _NameGet
в этом случае, но значение больше не возвращает неопределенное.
[@bs.deriving abstract]
type person2 = {
[@bs.as "Name"]
_Name: string,
age: int,
job: string,
};
let john = person2(~_Name="John", ~age=20, ~job="teacher")
let namejohn = _NameGet(john);
Js.log(namejohn);
выход: John
документы: переименование полей