Bug Report
🔎 Search Terms
- assert type guard
- this type guard
possibly related to #43368
🕗 Version & Regression Information
Seems to effect all versions
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about
⏯ Playground Link
Playground link with relevant code
💻 Code
/* Setup */
class SuccessResult<T> {
success: true = true;
constructor(public value: T) {}
throwOnFailure(): asserts this is SuccessResult<T> {}
isSuccess(): this is SuccessResult<T> {
return this.success;
}
}
class FailureResult<T, E extends Error> {
success: false = false;
constructor(public error: E) {}
throwOnFailure(): asserts this is SuccessResult<T> {
throw this.error;
}
isSuccess(): this is SuccessResult<T> {
return this.success;
}
}
type OperationResult<T = never, E extends Error = Error> =
| SuccessResult<T>
| FailureResult<T, E>;
function workingAssertGuard<T>(result: OperationResult<T>): asserts result is SuccessResult<T> {
if (!result.success){
throw result.error
}
}
/* End Setup */
const result: OperationResult<string> = {} as OperationResult<string>
/* This is the issue */
function assertThisType(){
result.throwOnFailure()
// type is unchanged
result // OperationResult<string, Error>
}
/* End of issue */
/* The rest below works as intended */
function narrowOnProperty(){
// Working narrowing from prop
if (result.success){
result.value // SuccessResult<string>
} else {
result.error // FailureResult<string, Error>
}
}
function assertTypeGuard(){
// Working narrowing from Assert Type Guard Function
workingAssertGuard(result)
result.value // SuccessResult<string>
}
function narrowThisTypeGuard(){
// Working narrowing from boolean Type Guard Member Function
if (result.isSuccess()) {
result.value // SuccessResult<string>
} else {
result.error // FailureResult<string, Error>
}
}
🙁 Actual behavior
Asserts on this from a member function does not narrow this
🙂 Expected behavior
Asserts on this from a member function does narrow this
Bug Report
🔎 Search Terms
possibly related to #43368
🕗 Version & Regression Information
Seems to effect all versions
⏯ Playground Link
Playground link with relevant code
💻 Code
🙁 Actual behavior
Asserts on
thisfrom a member function does not narrowthis🙂 Expected behavior
Asserts on
thisfrom a member function does narrowthis