Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

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

Closed
hi-ogawa opened this issue Sep 16, 2024 · 0 comments

Comments

@hi-ogawa
Copy link
Contributor

hi-ogawa commented Sep 16, 2024

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.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant