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
Is the proposed API correct? A signature is the target of the call, but is independent and the specific type arguments correspond to the signature itself.
Is Signature -> Type[] right? Or do you need something else? You have type arguments of signatures, but there are other type parameters in question.
What is it?
Whatever the language service does. Go to definition can be used for this.
Go to definition isn't a stable API for this.
If you have a way to get the signature as it is, you can get the type arguments.
Can basically use getResolvedSignature, grab the type arguments, followed by instantiateTypes with the original signature's mapper? As suggested in the isssue.
Yes, that sounds like the suggestion for the API.
Flag for Banning TypeScript-Specific Runtime Constructs
Long-standing question: how can we ban constructs that have no runtime impact (or are not trivially erasable)?
Possibly more impetus for this now that Node has --experimental-strip-types which replaces type constructs with whitespace.
What would it be called?
--noTranspiledFeatures
We transpile ESXXXX features.
--typeSyntaxOnly
--disallowRuntimeSyntax
--noLegacySyntax
--noRegerts
Does this flag imply --verbatimModuleSyntax and --isolatedModules?
The use-cases overlap a lot. We don't know why you would turn this flag on without those.
People seem to like typeSyntaxOnly the best.
This sort of thing is always weird because implementers are free to add new TS-specific constructs.
Well this is also about staying "pure" with ECMAScript.
Which are clearly not okay?
class C { constructor(public prop: number) {} }
enum of any form
namespace of any form
Are the following allowed?
import foo = require("foo");
import foo = bar.baz;
export =
Some of these can't just get erased to whitespace!
This is all wacky because the only reason we're revisiting this is --experimental-strip-types, which seems motivated because Node's sourcemap support is slow.
This is also speculative for a feature that hasn't shipped in stable.
Not fully true, there is also future-proofing against syntax conflicts in ECMAScript as a concern.
Lots of this could just be a lint rule which enforces ideological purity.
Some mixed feelings on whether this is a good thing to do, but there is a feel that this is not what we would do today.
Presumably this would be only in .ts, not .d.ts
Feels bad that we'd disallow enums, what is the substitute there?
Enums being nominal, having individual type members, etc. are all nice.
const foo = {...} as enum.
Wouldn't be a full substitute.
constx={a: 1,b: a,// can't do this}asenum;
What about import foo = require(...)?
Could support const foo = require(...) in some way, but would need a flag since a lot of code assumes this is any.
Is this really necessary? The hope is ESM/CJS interop will save us all.
A flag to add this flag? Just turn off this flag if you really need that or write const m = require("m") as typeof import("m").
API for exposing inferred type arguments of calls
#59637
Signature -> Type[]right? Or do you need something else? You have type arguments of signatures, but there are other type parameters in question.getResolvedSignature, grab the type arguments, followed byinstantiateTypeswith the original signature's mapper? As suggested in the isssue.Flag for Banning TypeScript-Specific Runtime Constructs
--experimental-strip-typeswhich replaces type constructs with whitespace.--noTranspiledFeatures--typeSyntaxOnly--disallowRuntimeSyntax--noLegacySyntax--noRegerts--verbatimModuleSyntaxand--isolatedModules?typeSyntaxOnlythe best.class C { constructor(public prop: number) {} }enumof any formnamespaceof any formimport foo = require("foo");import foo = bar.baz;export =--experimental-strip-types, which seems motivated because Node's sourcemap support is slow..ts, not.d.tsconst foo = {...} as enum.Wouldn't be a full substitute.
import foo = require(...)?const foo = require(...)in some way, but would need a flag since a lot of code assumes this isany.const m = require("m") as typeof import("m").