Skip to content

fix: adjust types in autocomplete-display-example #9240

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

Merged
merged 1 commit into from
Jan 8, 2018
Merged

fix: adjust types in autocomplete-display-example #9240

merged 1 commit into from
Jan 8, 2018

Conversation

rafaelss95
Copy link
Contributor

xxx2

@googlebot googlebot added the cla: yes PR author has agreed to Google's Contributor License Agreement label Jan 5, 2018
startWith({} as User),
map(user => user && typeof user === 'object' ? user.name : user),
startWith<string | User>(this.myControl.value),
map(value => value && typeof value === 'object' ? value.name : value as string),
Copy link
Contributor Author

@rafaelss95 rafaelss95 Jan 5, 2018

Choose a reason for hiding this comment

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

as was necessary to run properly on Stackblitz.

Copy link
Member

Choose a reason for hiding this comment

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

The typeof something === 'object' is a little tricky since it'll also be true for null. This might be nicer if you changed it to:

return typeof value === 'string' ? value : value.name;

Copy link
Contributor Author

Choose a reason for hiding this comment

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

"The typeof something === 'object' is a little tricky since it'll also be true for null"

In this case, it won't happen because the check is value && typeof value === 'object'. Anyway, I changed it since it's more readable.

displayFn(user: User): string {
return user ? user.name : user;
displayFn(user?: User): string | undefined {
return user ? user.name : undefined;
Copy link
Contributor Author

@rafaelss95 rafaelss95 Jan 5, 2018

Choose a reason for hiding this comment

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

I was doing the following:

displayFn(user?: User): string | undefined {
  return user ? user.name : user; <---
}

... however it doesn't go well in Stackblitz (maybe because there we don't have strictNullChecks).

@rafaelss95
Copy link
Contributor Author

rafaelss95 commented Jan 5, 2018

The class User can be just an Interface. What do you think, @jelbourn?

@@ -31,8 +31,8 @@ export class AutocompleteDisplayExample {
ngOnInit() {
this.filteredOptions = this.myControl.valueChanges
.pipe(
startWith({} as User),
map(user => user && typeof user === 'object' ? user.name : user),
startWith<string | User>(this.myControl.value),
Copy link
Member

Choose a reason for hiding this comment

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

myControl.value will always be undefined. You could start it off with an empty string instead.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Changed.

startWith({} as User),
map(user => user && typeof user === 'object' ? user.name : user),
startWith<string | User>(this.myControl.value),
map(value => value && typeof value === 'object' ? value.name : value as string),
Copy link
Member

Choose a reason for hiding this comment

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

The typeof something === 'object' is a little tricky since it'll also be true for null. This might be nicer if you changed it to:

return typeof value === 'string' ? value : value.name;

@rafaelss95
Copy link
Contributor Author

Out of curiosity, can someone explain why these errors weren't caught by the compiler?

Copy link
Member

@crisbeto crisbeto left a comment

Choose a reason for hiding this comment

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

LGTM

@crisbeto crisbeto added pr: lgtm action: merge The PR is ready for merge by the caretaker labels Jan 6, 2018
Copy link
Member

@jelbourn jelbourn left a comment

Choose a reason for hiding this comment

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

LGTM

@jelbourn jelbourn merged commit 15100ed into angular:master Jan 8, 2018
jelbourn pushed a commit to jelbourn/components that referenced this pull request Jan 8, 2018
@rafaelss95 rafaelss95 deleted the fix-autocomplete-example branch January 8, 2018 23:18
jelbourn pushed a commit to jelbourn/components that referenced this pull request Jan 9, 2018
@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Sep 8, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
action: merge The PR is ready for merge by the caretaker cla: yes PR author has agreed to Google's Contributor License Agreement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants