You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
classX1<T,AextendsArrayLike<T>>{reset(a: A): void{if(Array.isArray(a)){// Cannot assign to 'length' because it is a constant or a read-only property.a.length=0;//~~~~~~// When hovering over `a`, it is of type `A & any[]`}}}functionfn1<T,AextendsArrayLike<T>>(a: A): void{if(Array.isArray(a)){// Cannot assign to 'length' because it is a constant or a read-only property.a.length=0;//~~~~~~// When hovering over `a`, it is of type `A & any[]`}}classX2<T>{reset(a: ArrayLike<T>): void{if(Array.isArray(a)){// Cast is not required below, as expected.a.length=0;}}}functionfn2<T>(a: ArrayLike<T>): void{if(Array.isArray(a)){// Cast is not required below, as expected.a.length=0;}}
Expected behavior:
The Array.isArray type guard should yield type any[].
Actual behavior:
Where A is generic as defined by the enclosing function or class and the argument passed to Array.isArray is of type A, the type yielded is A & any[]. In this case, it becomes ArrayLike<T> & any[] causing the length property to be read only.
TypeScript Version: 2.8.1, 2.9.0-dev.20180419
Search Terms:
Code
Expected behavior:
The
Array.isArray
type guard should yield typeany[]
.Actual behavior:
Where
A
is generic as defined by the enclosing function or class and the argument passed toArray.isArray
is of typeA
, the type yielded isA & any[]
. In this case, it becomesArrayLike<T> & any[]
causing thelength
property to be read only.Playground Link:
https://www.typescriptlang.org/play/#src=class%20X1%3CT%2C%20A%20extends%20ArrayLike%3CT%3E%3E%20%7B%0D%0A%20%20%20%20reset(a%3A%20A)%3A%20void%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(Array.isArray(a))%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Cannot%20assign%20to%20'length'%20because%20it%20is%20a%20constant%20or%20a%20read-only%20property.%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20a.length%20%3D%200%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F~~~~~~%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20When%20hovering%20over%20%60a%60%2C%20it%20is%20of%20type%20%60A%20%26%20any%5B%5D%60%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0Afunction%20fn1%3CT%2C%20A%20extends%20ArrayLike%3CT%3E%3E(a%3A%20A)%3A%20void%20%7B%0D%0A%20%20%20%20if%20(Array.isArray(a))%20%7B%0D%0A%20%20%20%20%20%20%20%20%2F%2F%20Cannot%20assign%20to%20'length'%20because%20it%20is%20a%20constant%20or%20a%20read-only%20property.%0D%0A%20%20%20%20%20%20%20%20a.length%20%3D%200%3B%0D%0A%20%20%20%20%20%20%20%20%2F%2F~~~~~~%0D%0A%20%20%20%20%20%20%20%20%2F%2F%20When%20hovering%20over%20%60a%60%2C%20it%20is%20of%20type%20%60A%20%26%20any%5B%5D%60%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0Aclass%20X2%3CT%3E%20%7B%0D%0A%20%20%20%20reset(a%3A%20ArrayLike%3CT%3E)%3A%20void%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(Array.isArray(a))%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Cast%20is%20not%20required%20below%2C%20as%20expected.%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20a.length%20%3D%200%3B%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0Afunction%20fn2%3CT%3E(a%3A%20ArrayLike%3CT%3E)%3A%20void%20%7B%0D%0A%20%20%20%20if%20(Array.isArray(a))%20%7B%0D%0A%20%20%20%20%20%20%20%20%2F%2F%20Cast%20is%20not%20required%20below%2C%20as%20expected.%0D%0A%20%20%20%20%20%20%20%20a.length%20%3D%200%3B%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0A
Related Issues:
Possibly related to #22214
The text was updated successfully, but these errors were encountered: