Skip to content
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

Feat: not implement keyof this #1059

Merged
merged 7 commits into from
Aug 9, 2023
Merged

Feat: not implement keyof this #1059

merged 7 commits into from
Aug 9, 2023

Conversation

sunrabbit123
Copy link
Collaborator

Description:

implement keyof this

// @strict: true
// @declaration: true

type OldDiff<T extends keyof any, U extends keyof any> = (
    & { [P in T]: P; }
    & { [P in U]: never; }
    & { [x: string]: never; }
)[T];
interface A {
    a: 'a';
}
interface B1 extends A {
    b: 'b';
    c: OldDiff<keyof this, keyof A>;
}
type c1 = B1['c']; // 'c' | 'b'

Related issue (if exists):

@github-actions
Copy link

github-actions bot commented Aug 8, 2023

Thank you for the PR!
Commit: 8be5db7

Files to check

These are files which is affected by the current PR, but not reflected. If there's no file below this message, please ignore this message.

You can run ./scripts/auto-unignore.sh from crates/stc_ts_file_analyzer for typescript files, and ./scripts/check.sh from crates/stc_ts_type_checker for *.stats.rust-debug files.

.into_owned();

return Ok(Cow::Owned(ty));
// TODO(): scope of normalize should be obj_ty scope
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than with_child, is there a better way to specify the scope as that object?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You mean you only want to change scope.this?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If so, I simply modifed self.scope.this like

self.scope.this = old_this;

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you want to ensure that you don't forget resetting self.scope.this, you can do like

let old_this = self.scope.this.take();
self.scope.this = new_this;
let result = (|| {
    // your code.
})();
self.scope.this = old_this;

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I want a scope outside of the traditional context.
Like when you call a closure, the closure doesn't use the caller's scope.

Of course, it's fine to do it now or with the code you suggested for now.

Copy link
Member

@kdy1 kdy1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@kdy1 kdy1 enabled auto-merge (squash) August 9, 2023 13:44
@kdy1 kdy1 merged commit 9fe5d43 into dudykr:main Aug 9, 2023
7 checks passed
@kdy1 kdy1 added this to the v0.0.1: Correctness milestone Aug 10, 2023
@sunrabbit123 sunrabbit123 deleted the fix/2 branch August 12, 2023 13:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants