So I have a Component.html that includes an input as follows:
<input type="text" (change) = "setNewUserName($event.target.value)"/>
the component.ts is:
import { Component } from "@angular/core";
@Component({
selector : 'app-users-list',
templateUrl : './usersList.component.html'
})
export class UsersListComponent
{
setNewUserName (userName : string): void {
console.log('setNewUserName', userName)
}
}
and finally the module.ts is:
@NgModule ({
declarations: [UsersListComponent],
imports : [CommonModule],
exports: [UsersListComponent]
})
export class UsersListModule {}
When running the server, the following error pops up:
error TS2531: Object is possibly 'null'.
1 <input type="text" (change) = "setNewUserName($event.target.value)"/>
~~~~~
The "Object is possibly 'null'" error occurs when we try to access a property on an object that may have a value of null . To solve the error, use the optional chaining operator or a type guard to make sure the reference is not null before accessing properties.
The exclamation mark is the non-null assertion operator in TypeScript. It removes null and undefined from a type without doing any explicit type checking.
The "Object is of type unknown" error occurs when we try to access a property on a value that has a type of unknown . To solve the error, use a type guard to narrow down the type of the object before accessing a property, e.g. if (err instanceof Error) {} . Copied!
Are you using Angular Ivy? Most possibly it's due to the template type checking in Ivy AOT.
Nevertheless, there are multiple options
<input type="text" (change) = "setNewUserName($event)"/>
export class UsersListComponent {
setNewUserName (event: any): void {
console.log('setNewUserName', event.target.value)
}
}
<input #userName type="text" (change) = "setNewUserName(userName.value)"/>
export class UsersListComponent {
setNewUserName (userName : string): void {
console.log('setNewUserName', userName)
}
}
$any()
<input type="text" (change) = "setNewUserName($any($event.target).value)"/>
export class UsersListComponent {
setNewUserName (userName : string): void {
console.log('setNewUserName', userName)
}
}
Use a template-driven or reactive form to get the input value. IMO this would be the most elegant approach.
Update: add disable type checking
try this
setNewUserName($any($event.target).value);
it will work
this worked for me
($any($event.target).value);
in angylar 13
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With