Same situation than #23040, but using an intermediate function instead of using "!".
TypeScript Version: 2.9.0-dev.20180410
Search Terms: "'this' context of type 'void' is not assignable"
Code
interface Foo {
required: ((this: Foo) => void);
optional: ((this: Foo) => void) | null;
}
function notNull<T>(value: T): NonNullable<T> {
if (value == null) throw Error("notNull() failed");
return value as NonNullable<T>;
}
declare const foo: Foo;
foo.required();
foo.optional!(); // Fixed by #23040.
notNull(foo.optional)(); // Error.
Expected behavior:
No Error.
Actual behavior:
The 'this' context of type 'void' is not assignable to method's 'this' of type 'Foo'.
Playground Link: https://www.typescriptlang.org/play/index.html#src=interface%20Foo%20%7B%0D%0A%20%20%20%20required%3A%20((this%3A%20Foo)%20%3D%3E%20void)%3B%0D%0A%20%20%20%20optional%3A%20((this%3A%20Foo)%20%3D%3E%20void)%20%7C%20null%3B%0D%0A%7D%0D%0A%0D%0Afunction%20notNull%3CT%3E(value%3A%20T)%3A%20NonNullable%3CT%3E%20%7B%0D%0A%20%20%20%20if%20(value%20%3D%3D%20null)%20throw%20Error(%22notNull()%20failed%22)%3B%0D%0A%20%20%20%20return%20value%20as%20NonNullable%3CT%3E%3B%0D%0A%7D%0D%0A%0D%0Adeclare%20const%20foo%3A%20Foo%3B%0D%0Afoo.required()%3B%0D%0Afoo.optional!()%3B%20%20%20%2F%2F%20Fixed%20by%20%2323040.%0D%0AnotNull(foo.optional)()%3B%20%20%2F%2F%20Error.%0D%0A
Related Issues: #23040
Same situation than #23040, but using an intermediate function instead of using "!".
TypeScript Version: 2.9.0-dev.20180410
Search Terms: "'this' context of type 'void' is not assignable"
Code
Expected behavior:
No Error.
Actual behavior:
The 'this' context of type 'void' is not assignable to method's 'this' of type 'Foo'.
Playground Link: https://www.typescriptlang.org/play/index.html#src=interface%20Foo%20%7B%0D%0A%20%20%20%20required%3A%20((this%3A%20Foo)%20%3D%3E%20void)%3B%0D%0A%20%20%20%20optional%3A%20((this%3A%20Foo)%20%3D%3E%20void)%20%7C%20null%3B%0D%0A%7D%0D%0A%0D%0Afunction%20notNull%3CT%3E(value%3A%20T)%3A%20NonNullable%3CT%3E%20%7B%0D%0A%20%20%20%20if%20(value%20%3D%3D%20null)%20throw%20Error(%22notNull()%20failed%22)%3B%0D%0A%20%20%20%20return%20value%20as%20NonNullable%3CT%3E%3B%0D%0A%7D%0D%0A%0D%0Adeclare%20const%20foo%3A%20Foo%3B%0D%0Afoo.required()%3B%0D%0Afoo.optional!()%3B%20%20%20%2F%2F%20Fixed%20by%20%2323040.%0D%0AnotNull(foo.optional)()%3B%20%20%2F%2F%20Error.%0D%0A
Related Issues: #23040