코틀린에서는 타입스크립트의 Partial 을 자체로 구현할 수 없다.
그런데 jso 를 통해 자바스크립트 객체를 만들면 코틀린에서 nullable이 아니더라도 설정한 필드만 설정이 되고 나머지는 설정하지 않는다. (undefined)
그래서 요즘에 State 관련해서 여러개 올렸는데 useReducer에 넘기는 리듀서의 리턴타입은 온전한 State여야하기 때문에 자바스크립트에서처럼 spread 연산자로 쓰고 싶은데 코틀린은 이걸 지원 안한다.
처음에는 Object.assign을 쓰면 되지 않을까 싶어서 썼는데 State 업데이트가 한템포씩 느리게 되는 것 같다. 그러므로 더 서칭을 했는데 여기서 힌트를 얻어서 다음을 만들었다.
fun <TState : State> mergeState(prevState: TState, partial: TState): TState {
return JsFunction<TState, TState, TState>("x", "y", "return { ...x, ...y }")(prevState, partial)
}
fun <TState : State> TState.copy(partial: TState): TState {
return mergeState(this, partial)
}
fun mergeArray(dest: Array<*>, vararg target: Any?): Array<*> {
return JSFunction<Array<*>, Array<*>, Array<*>>("x", "y", "return [ ...x, ...y ]")(dest, target)
}
으로 만들어 놓으면 잘 되는듯
끗.
답글 남기기