-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Isolated declarations does not handle object getters and setters with different types #58531
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Hm. We didn't allow get/set in types for a looong time, and only added it to support differing getter/setter type pairs - and to avoid accidentally breaking backcompat for people, we only emitted getter/setter pairs if the types of the getter and setter actually differed. @RyanCavanaugh do you think we've supported getter-setter pairs in |
I feel like we just talked about this in a recent design meeting or something; IMO we should be preserving things as-written and not be doing our merging thing anymore. |
I am actually surprised this does error. I remember adding an error if there is a type on both getter and setter, and only collapsing them if the type was specified only on one of them. |
Just found another problem related to the current emit: export const x = {
set foo(str: string) {}
} emits as: export declare const x: {
foo: string;
}; even though it should probably be export declare const x: {
set foo(str: string);
}; or export declare const x: {
get foo(): void;
set foo(str: string);
}; |
I don't think this is actually an issue with the errors on second thought. The way I implemented this in the sample declaration emitter was by collapsing the accessor pair only if there had one type annotation between them and preserving the get/set in the type otherwise. So the errors are fine, but the TSC emit is not yet something another tool can reproduce. As we discussed though for 5.5 emit will not yet be fully aligned with what another tool can reproduce, so this ticket should be deferred for 5.6 |
π Search Terms
π Version & Regression Information
5.5.0-dev.20240514
β― Playground Link
https://www.typescriptlang.org/play/?target=99&isolatedDeclarations=true&ts=5.5.0-dev.20240514#code/KYDwDg9gTgLgBAYwgOwM7wIZwLxwN4BQcxcA5sPAEYAUAlAFxzpQCWyp+RJ3UFArlGRwARMK7EAvgBpxTCnBoA3DABtGzNqVqduEghIDcBAjACeYYHADKMVuwCCKlhlQ4mtzUdCRYiFOkQ3Qm5yeAATOkYbO1JHZ1dg7hJeGAEhUVlpWVR5COU1dxjtRMl9I2NvaHgkNHhLXBKyeQAzSMLNHSTiFLSRMV0Zbhz4VvzGZD4AW0pgKGLMsqA
π» Code
π Actual behavior
TypeScript emits:
This is behaviour is not possible to reproduce for isolated declarations emitters, because it requires type comparisons for the types of the setter and getter.
π Expected behavior
One of:
Emit based on syntax, do not collapse a getter/setter pair with the same type to a property
OR
Error on both
c.d
ande.f
because return type of getter and setter do not matchAdditional information about the issue
cc @dragomirtitian
The text was updated successfully, but these errors were encountered: