patterntypescriptvueCritical
'Property does not exist on type 'never'
Viewed 0 times
propertyexistdoesnevernottype
Problem
This is similar to #40796374 but that is around types, while I am using interfaces.
Given the code below:
I have an error saying 'Property 'name' does not exist on type 'never'.
I don't understand how instance could ever be a 'never'. Can anyone shed some light on this?
Given the code below:
interface Foo {
name: string;
}
function go() {
let instance: Foo | null = null;
let mutator = () => {
instance = {
name: 'string'
};
};
mutator();
if (instance == null) {
console.log('Instance is null or undefined');
} else {
console.log(instance.name);
}
}I have an error saying 'Property 'name' does not exist on type 'never'.
I don't understand how instance could ever be a 'never'. Can anyone shed some light on this?
Solution
Because you are assigning
Now if you don't declare it as the literal value
Never type documentation: https://www.typescriptlang.org/docs/handbook/basic-types.html#never
Edit:
The issue in the updated example is actually an open issue with the compiler.
See:
https://github.com/Microsoft/TypeScript/issues/11498
https://github.com/Microsoft/TypeScript/issues/12176
instance to null. The compiler infers that it can never be anything other than null. So it assumes that the else block should never be executed so instance is typed as never in the else block.Now if you don't declare it as the literal value
null, and get it by any other means (ex: let instance: Foo | null = getFoo();), you will see that instance will be null inside the if block and Foo inside the else block.Never type documentation: https://www.typescriptlang.org/docs/handbook/basic-types.html#never
Edit:
The issue in the updated example is actually an open issue with the compiler.
See:
https://github.com/Microsoft/TypeScript/issues/11498
https://github.com/Microsoft/TypeScript/issues/12176
Context
Stack Overflow Q#44147937, score: 148
Revisions (0)
No revisions yet.