Я работаю над некоторым пакетом JS и хочу предоставить отдельные определения типа потока как index.js.flow
, потому что внутреннее поведение немного отличается.
У меня есть эта функция для создания определения компонента
function defineComponent(name, createFunc);
createFunc
- это функция, которая захватывает элементы и возвращает объект, содержащий определенные пользователем действия над этим компонентом
, поэтому вы можете вызвать defineComponent
следующим образом:
const loginForm = defineComponent("login form", () => {
...
...
return {
fillUsername: () => { ...doesn't matter what is return type... },
fillPassword: () => { ...doesn't matter what is return type... }
};
});
иэти действия должны быть цепными, но я не хочу обременять пользователя постоянным упоминанием типа возврата в каждом определяемом пользователем действии.Таким образом, окончательная цепочка должна выглядеть следующим образом:
loginForm
.fillUsername()
.fillPassword()
Итак, внутренне defineComponent
обернет каждое пользовательское действие следующим образом для создания цепочки способностей:
function defineComponent(..., createFunc) {
const actions = createFunc(...);
return actions.map(action => {
return (...args) => {
action(...args);
return actions;
}
})
}
Я уже пробовал это (все моикод проверки):
type ComponentType<T> = $ObjMap<T, <V>((V) => any) => V => ComponentType<T>>;
declare function defineComponent<T>(
name: string,
createFunc: () => T
): ComponentType<T>;
const Component = defineComponent("foo", () => {
return {
fooAction: () => {},
barAction: () => {}
};
});
Component.fooAction().barAction()
Я перехожу к потоку No errors!
, но поток не выдает ошибок, даже когда я делаю что-то вроде
Component.fooAction.barAction()
А также VS Code не обеспечивает автозаполнение выше этого: /
Спасибо!