Vue Composition API에 금형이 망가져서 너무 좋았어요.
12064 단어 JavaScriptVue.js
이것은 bosyu Advent Calendar 2019 4일째 보도입니다.
잘 부탁드립니다.
bosyu의 프론트 데스크톱은 Vue를 사용하지만 최근 Composition API가 상승했으니 사용하세요~~
이런 느낌.
https://github.com/vuejs/composition-api
이거?
하지만 이런 곳도 가끔 있는데, 며칠 전에 재미있는 곳을 발견해서 적어 놓았어요.
요즘 고칠지도 몰라요.
무슨 일
제목과 같지만 모양이 신기해졌다.
구체적인 코드를 쓰면 다음과 같은 형식이 있다????하계.
nazo.vue
export default createComponent({
setup () {
const state = reactive({
status: 'hoge',
value: 'fuga'
});
const v = state.value;
}
});
여기서
state
기대는 다음과 같다.type State = {
status: string;
value: string;
}
VScode 등으로state
는string
왜?
그래서 어떤 느낌인지 봅시다.
export function reactive<T = any>(obj: T): UnwrapRef<T> {
if (process.env.NODE_ENV !== 'production' && !obj) {
warn('"reactive()" is called without provide an "object".');
// @ts-ignore
return;
}
if (!isPlainObject(obj) || isReactive(obj) || isNonReactive(obj) || !Object.isExtensible(obj)) {
return obj as any;
}
const observed = observe(obj);
def(observed, ReactiveIdentifierKey, ReactiveIdentifier);
setupAccessControl(observed);
return observed as UnwrapRef<T>;
}
이런 느낌이에요.return
의 금형이 as
로 바뀌어 강도를 느꼈다.그것은 잠시 언급하지 않겠습니다. 이것은
UnwrapRef<T>
엽서입니다.저것 좀 봅시다.
export type UnwrapRef<T> = T extends Ref<infer V>
? UnwrapRef2<V>
: T extends BailTypes
? T // bail out on types that shouldn’t be unwrapped
: T extends object ? { [K in keyof T]: UnwrapRef2<T[K]> } : T
// prettier-ignore
type UnwrapRef2<T> = T extends Ref<infer V>
? UnwrapRef3<V>
: T extends BailTypes
? T
: T extends object ? { [K in keyof T]: UnwrapRef3<T[K]> } : T
// ...
// prettier-ignore
type UnwrapRef10<T> = T extends Ref<infer V>
? V // stop recursion
: T
이런 느낌이에요.ConditionalTypes
금형을 판정한다.http://www.typescriptlang.org/docs/handbook/advanced-types.html#conditional-types
다음은 이
Ref
의 정의를 살펴보겠습니다.export interface Ref<T> {
value: T;
}
태그 요소의 표시 속성을 수정합니다.즉,
value
을 구성원으로 보유한 상황에서 Ref
를 extends로 간주한다UnwrapRef2
UnwrapRef3
...흘러간다.최종 도착
UnwrapRef10
V
.결과는 처음 쓴 것처럼
state
string
이 되었다.파다
https://github.com/vuejs/composition-api/pull/167
홍보는 있지만
Object
중 Object
같은 문제가 생기면 곤란하다.간단하게 뭘 할 수 있는 느낌은 아니기 때문에 가능하다면
value
최대한 사용하지 않는 것이 최선의 대책이다.또 Vue-next는 같은 문제가 발생하지 않도록 조치를 취한 것 같다.
https://github.com/vuejs/vue-next/blob/master/packages/reactivity/src/ref.ts
그래서 이것과 같은 설치
composition-api
를 PR로 하는 건가요?이런 느낌이야.
그 다음은 사악하지만
createComponent({
setup () {
const state = reactive({
status: 'hoge',
value: 'fuga'
}) as unknown as { status: string, value: string };
const v = state.value;
}
});
unknown
라 any
라 금형을 한 번 망가뜨려서 겨우 만들었다.제일 안 되는 느낌이지만
총결산
as unknow as Hoge
이 가장 흉악하다.Reference
이 문제에 관하여(Vue Composition API에 금형이 망가져서 너무 좋았어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/merotan/items/fa31f7242e6888538259텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)