Closed
Description
TypeScript Version:
1.9.0-dev.20160503
Code:
export function safeLibraryFunction1(arg: string) {
if (arg == null)
throw new TypeError(`Hi JS Consumer, I checked, it turns out the argument you
gave was a null or undefined`);
if (typeof arg !== "string")
throw new TypeError(`Hi JS Consumer, I checked, the argument you gave me wasn't a string..
seems like something went wrong in your program?..`);
// ..
}
interface SomeType {
a: number;
}
export function safeLibraryFunction2(arg: SomeType) {
if (arg === undefined)
throw new TypeError(`Hi TS Consumer, it turns out the argument was undefined.
I don't assume you're using strict nullability checks,
I know that could be a bit difficult thing to introduce
or you haven't even heard about it
so I also check at runtime :)`);
if (arg === null)
throw new TypeError(`Hi TS Consumer, it turns out the argument was null,
maybe you had an unsafe cast somewhere in your program
or you're not using strict nullability checks?
I already thought of that so I checked anyway ;)`);
// ..
}
export function safeLibraryFunction3(arg: SomeType) {
if (arg != null) {
//.. do something
}
else {
throw new TypeError(`Hi JS Consumer, I think about you all the time
that's why I put many safeguards in my program
to make sure that everything goes smoothly..
c'ya later..`);
}
}
Expected behavior:
The comparisons work.
Actual behavior:
Operator `==` cannot be applied to type X and null
Operator `===` cannot be applied to type X and null
Operator `===` cannot be applied to type X and undefined
Operator `!=` cannot be applied to type X and null
(My projects are full of these errors when strictNullChecks
is enabled)
Metadata
Metadata
Assignees
Type
Projects
Relationships
Development
No branches or pull requests
Activity
ahejlsberg commentedon May 3, 2016
Yup, this one is already on our list.