fix(types): fix missing error for accessing undefined instance properties

fix #12718
This commit is contained in:
Evan You 2022-08-19 12:22:51 +08:00
parent 7161176cd0
commit 8521f9d3f6
2 changed files with 64 additions and 8 deletions

View File

@ -1166,6 +1166,62 @@ defineComponent({
} }
}) })
// #12742 allow attaching custom properties (consistent with v3) describe('constructor attach custom properties', () => {
const Foo = defineComponent({}) // #12742 allow attaching custom properties (consistent with v3)
Foo.foobar = 123 const Foo = defineComponent({})
Foo.foobar = 123
})
describe('constructor instance type', () => {
const Comp = defineComponent({
data() {
return {
a: 1
}
},
computed: {
ac() {
return 1
}
},
methods: {
callA(b: number) {
return b
}
},
setup() {
return {
sa: '1'
}
}
})
const comp = new Comp()
expectType<number>(comp.a)
expectType<number>(comp.ac)
expectType<string>(comp.sa)
expectType<(b: number) => number>(comp.callA)
})
describe('should report non-existent properties in instance', () => {
const Foo = defineComponent({})
const instance = new Foo()
// @ts-expect-error
instance.foo
const Foo2 = defineComponent({
data() {
return {}
},
methods: {
example() {}
}
})
const instance2 = new Foo2()
// @ts-expect-error
instance2.foo
})

View File

@ -72,7 +72,7 @@ export type DefineComponent<
*/ */
export function defineComponent< export function defineComponent<
RawBindings, RawBindings,
D = Data, D = {},
C extends ComputedOptions = {}, C extends ComputedOptions = {},
M extends MethodOptions = {}, M extends MethodOptions = {},
Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
@ -101,8 +101,8 @@ export function defineComponent<
*/ */
export function defineComponent< export function defineComponent<
PropNames extends string, PropNames extends string,
RawBindings = Data, RawBindings = {},
D = Data, D = {},
C extends ComputedOptions = {}, C extends ComputedOptions = {},
M extends MethodOptions = {}, M extends MethodOptions = {},
Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
@ -140,8 +140,8 @@ export function defineComponent<
*/ */
export function defineComponent< export function defineComponent<
Props, Props,
RawBindings = Data, RawBindings = {},
D = Data, D = {},
C extends ComputedOptions = {}, C extends ComputedOptions = {},
M extends MethodOptions = {}, M extends MethodOptions = {},
Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,