TypeScript를 사용하여 Vue.js에서 비반응 인스턴스 속성을 지정하는 방법
이행하고 있습니다.Vue.js
컴포넌트를 TypeScript에 추가합니다.안내에 따라서, 나는 그것을 사용하려고 했다.Vue.extend()
내 컴포넌트를 위해.구성 요소는 다음과 같습니다.
import Vue from 'vue';
const Component = Vue.extend({
// type inference enabled
created() {
// `y` is non-reactive property
this.y = 20; // TYPESCRIPT THROWS ERROR
}
data() {
return {
// x is reactive property
x: 10
};
}
});
위의 예에서 나는 자산이 있다.x
반응성이 있고y
비표준 속성으로 지정됩니다.하지만, 나는 단지 부동산에 대한 유형 추론을 얻을 수 없다.y
TypeScript에서 증강 기능이 동작하기 때문입니다.
구성 요소를 정의하는 데 단순 개체 내보내기를 사용할 수 없습니다. 두 구성 요소 모두에 대해 형식 오류가 발생하기 때문입니다.y
그리고.x
.
이제 이 파일을 JS로 유지하거나 코드를 이동해야 합니다.vue-class-component
내가 이 일을 처리할 수 있게 해주지하지만, 저는 이사가기 꺼려집니다.vue-class-component
라이브러리 레벨의 코드이기 때문입니다.
어떻게 하면 좋을지TypeScript
행복할까?
가장 간단한 해결책은 다음과 같습니다.
data() {
return {
// x is reactive property
x: 10
} as any as { x: number; y: number };
}
단, 이를 위해서는 모든 속성을 명시적으로 정의할 필요가 있습니다.data
.
또는 다음 도우미를 사용할 수도 있습니다.
function withNonReactive<TData>(data: TData) {
return <TNonReactive>() => data as TData & TNonReactive;
}
다음과 같이 합니다.
data() {
return withNonReactive({
// x is reactive property
x: 10
})<{
// non-reactive properties go here
y: number
}>();
}
TypeScript 오류를 제거하는 한 가지 방법은 다음 속성을 정의하는 것입니다.
data() {
return {
nonReactive: {} as any
}
}
그런 다음 생성된 오브젝트에 비메모리 속성을 추가합니다.
created() {
this.nonReactive.foo = {}
}
다른 방법은 컴포넌트용으로 typecript shim 파일을 작성하는 것입니다.
기능 래퍼 없는 솔루션
Vue.extend({
data() {
const reactive = {
name: 'Jack Sparrow',
}
return reactive as typeof reactive & {
nonReactiveProperty: string;
}
},
})
언급URL : https://stackoverflow.com/questions/48071279/how-to-specify-non-reactive-instance-property-in-vue-js-using-typescript
'sourcecode' 카테고리의 다른 글
Vue 앱 빌드를 생성하려면 어떤 명령을 사용해야 합니까? (0) | 2022.08.27 |
---|---|
웹 확장의 공유 vuex 상태(데드 개체 문제) (0) | 2022.08.27 |
Java에서 구분된 항목의 문자열을 작성하는 가장 좋은 방법은 무엇입니까? (0) | 2022.08.27 |
로그인 후 NuxtJ 리다이렉트 (0) | 2022.08.27 |
Vuejs 이벤트 한정자 (0) | 2022.08.27 |