Comments (4)
This depends on the filter
's definition that:
filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[];
With your type predicate you end up with:
T // [number | null]
S // [number | string]
This S
doesn't satisfy this T
so this overload can't be picked.
from typescript.
You would need to write this as
declare function Tuple0IsNumberOrString<T>(tuple: [T]): tuple is [T & (number | string)]
from typescript.
The second overload here allows the typeguard the work.
interface Array<T> {
filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[];
filter<V, S extends V>(predicate: (value: V, index: number, array: T[]) => value is S, thisArg?: any): (T&S)[];
}
The problem though is that T and may not be assignable to V, leading to unsafety. V needs a constraint that it is a supertype of T. e.g.
type AllowedV<V, T> = T extends V ? V : 'not allowed'
declare global {
interface Array<T> {
filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[];
filter<V, S extends V>(predicate: (value: AllowedV<V, T>, index: number, array: T[]) => value is S, thisArg?: any): (T&S)[];
}
}
TS Playground with supertype constraint
Seems like we need supertype constraints to make progress on this #14520
from typescript.
This issue has been marked as "Not a Defect" and has seen no recent activity. It has been automatically closed for house-keeping purposes.
from typescript.
Related Issues (20)
- feature request: expose `tsconfig.json` types in TypeScript files HOT 1
- Incorrect ES5 code emitted for closures in loops when noCheck is enabled HOT 6
- Iterator and AsyncIterator missing Symbol.dispose method in esnext.disposable
- tsc compiler crash on complex project (with tons of tests) HOT 6
- Using @ts-expect-error on class method signature would disable checking all other methods in interface HOT 2
- Sometimes inlay hints disappear when Vue source code contains a special custom component. HOT 2
- When combining the same type, the specific type before combining is still provided HOT 1
- getSymbolAtLocation(node: Identifier) return undefined, in WatchCompilerHost, after change dependency source file HOT 2
- [Regression] Circular reference error when passing a class expression with non-primitive static properties to a generic function
- [NewErrors] 5.6.0-dev.20240714 vs 5.5.3 HOT 9
- [ServerErrors][JavaScript] 5.6.0-dev.20240714 vs 5.5.3 HOT 13
- [ServerErrors][TypeScript] 5.6.0-dev.20240714 vs 5.5.3 HOT 21
- spread operator infer to wrong type with method override and generic HOT 6
- Intellisense is slow and some things don't work HOT 8
- TS error moving a function to another file HOT 1
- Constructor cannot access own protected instance when typed as union HOT 3
- This comparison appears to be unintentional because the types 'U[K]' and 'T[K]' have no overlap.ts(2367) HOT 3
- [isolatedDeclarations] Optional parameter in arrow function typed as imported generic type gets emitted as `any` HOT 2
- Easier use of indexed access types on nullable/optional types HOT 3
- Narrow conditional type HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from typescript.