Open NeilKleistGao opened 2 years ago
TODO:
NewParser.scala
Is it from .ts
to .mls
, or .d.ts
to .mls
?
I think it should work with both. Right?
I think so. I can add some .d.ts
tests later.
All interfaces are from TypeScript types.ts
private
/protected
class A {
private a: number
protected b: string
}
export
in tsExample:
export namespace N1 {
interface IF {
foo()
}
class Base {
a: number = 10
}
export class MyClass extends Base implements IF {
foo() {}
}
}
In this case, Base
will not be exported so users can't access to it. However, we still need to consider that MyClass
extends the Base
so we need to add a: number
into MyClass
- [ ] deal with
export
in tsExample:
export namespace N1 { interface IF { foo() } class Base { a: number = 10 } export class MyClass extends Base implements IF { foo() {} } }
In this case,
Base
will not be exported so users can't access to it. However, we still need to consider thatMyClass
extends theBase
so we need to adda: number
intoMyClass
Also we can create an instance by calling the exported function, but we can't use new
:
export namespace N1 {
class Foo {
a: number = 10
}
export function get(): Foo {
return new Foo();
}
}
let x = N1.get()
console.log(x.a)
// error!
// let y = new N1.Foo()
const none: Option<never> = { _tag: 'None' }
const some = <A>(a: A): Option<A> => ({ _tag: 'Some', value: a })
Interesting. What's the return type of N1.get()
when viewed from the outside of this module/file? If it's something like N1.Foo
, then that means we should still export the class, but simply make its constructor private.
Interesting. What's the return type of
N1.get()
when viewed from the outside of this module/file? If it's something likeN1.Foo
, then that means we should still export the class, but simply make its constructor private.
The type I got is:
symbol: <ref *1> SymbolObject {
flags: 32,
escapedName: 'Foo',
declarations: [Array],
exports: [Map],
members: [Map],
valueDeclaration: [NodeObject],
parent: undefined,
isReferenced: 788968,
id: 14
},
In the members, we can also get private/protected members. So I think we do need a private constructor. 🤔
I also find something like this in https://github.com/gcanti/fp-ts/blob/master/src/Option.ts.
export const URI = 'Option'
I think we'd better convert all stuffs rather than merely functions or interfaces.
Huh, well yeah of course we should convert these too...
(Note that the URI machinery is for higher kinded types and is used in conditional types, which we don't yet support.)
readonly
support(mut
in MLScript)Are you planning to support mapped types, conditional types, etc.?
@kevinbarabash Yes, the plan is to eventually support arbitrary computations in types (in a way that cleanly generalizes TypeScript's various ad-hoc type computation syntaxes). However, there is a long road before we get there, as for the moment we are busy working out the basic components of the language and type system.
Implementing ts2mls to allow using TypeScript libraries in MLscript.
Candidate TypeScript Libraries: