-
Notifications
You must be signed in to change notification settings - Fork 90
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: enhanced type inference for future api #486
Conversation
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
export const loader: ActivityLoader<typeof MyActivity> = ({ params }) => {
// ...
}
이 전제때문에 힘들겠네요 ㅠ |
import type이면 괜찮을수도 있긴 한데, #478 (comment) 에서 제안한 것 처럼 |
af090da
to
a25b4ec
Compare
Contribution
as const
없이createConfig
에서 ActivityName을 추론할 수 있도록 개선합니다.@stackflow/react/future
#478 (comment)defineActivity
에서 별도의paramTypes
선언을 하지 않고 loader로부터 추론할 수 있도록 개선합니다.@stackflow/react/future
#478 (comment)Known Issues
ActivityParam
에는 필요하지만loader
에서는 관심이 없는 필드들이 있습니다.loader
의 인자는 대응되는 Activity의ActivityParam
의 부분집합입니다.push
등의 액션에서 param type을 추론하는 데loader
를 사용하고 있으나, 실제로는 Activity에서 추론되어야 합니다.위와 같이 주어졌을 때,
push("Article", {...})
에서 타입이{ articleId: string, title: string }
으로 추론되어야 하나{ articleId: string }
으로 추론되고 있습니다.가능한 대안은 다음과 같습니다.
타입 추론을 loader가 아닌 Activity를 통하도록 변경한다.
디자인 의도상 config에서는 Activity를 import하지 않고 있기 때문에, config보다 상위 레이어에서 해결해야 합니다.
paramTypes
를 따로 선언하는 기존 접근과 거의 동일해집니다.flow({ config })
에서stack()
에서 반환하는actions
등의 맥락을 추가로 전달받을 수 있습니다.ActivityParam 인터페이스를 Loader, Activity에서 공유하도록 강제한다.
Decision
->
flow({ config })
를flow<Actions>()
로 인터페이스를 변경하고,stack()
이 반환하는action
오브젝트에 loader, Activity 타입 관심사를 보존하는 방식으로 수정합니다.