Skip to content

decorators on uninitialized class fields are not working when useDefineForClassFields: false #3913

@hi-ogawa

Description

@hi-ogawa

Related: #3911, vitejs/vite#18105

Full code to compare with tsc is here https://github.com/hi-ogawa/reproductions/tree/main/vite-18105-decorator-useDefineForClassFields

Here is a part of the code on esbuild try

function testDecorator(_value: unknown, context: DecoratorContext) {
	if (context.kind === "field") {
		return () => "dec-ok";
	}
}

class DecClass {
	@testDecorator
	decInit = "init";

	@testDecorator
	decNoInit: any;
}

console.log(new DecClass())
// esbuild: DecClass { decInit: 'dec-ok' }
// tsc:     DecClass { decInit: 'dec-ok', decNoInit: 'dec-ok' }

Vite uses useDefineForClassFields: false for esbuild transform when users don't not explicitly set, but this specific decorator usages being not working seems to lead to a bit surprising behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions