sbip-sg/tsll

Translation of Typescript anyType to LLVM IR

Opened this issue · 3 comments

Motivation

Similar to Javascript, Typescript also supports type any that allows a variable of that type to be assigned values of any other types. This also means that the type checking is disabled whenever any is used in Typescript. Now we are trying to find how any constructs with any could be possibly translated into LLVM IR. Below is an example of one variable and two functions that are defined with any in Typescript.

Example

let obj: any = { content: 'heymycontent' };
obj = 23;

function isView(arg: any): boolean {
    // Do something here
}

// the output of this function may be of any
function calculate(argA: string, argB: number): any {
    return argA + argB;
}

Hi @lung21,

Is this the case that there will be 2 type errors (type conflict) in the below code?

let obj: any = { content: 'heymycontent' };
obj = 23;        // ==> assign an integer value to a record?
function isView(arg: any): boolean {
    // Do something here
}

// the output of this function may be of any
function calculate(argA: string, argB: number): any {
    return argA + argB;          // ===> addition of a string and a number
}

@taquangtrung Thank you for responding.

In short, Typescript considers these not erroneous with any unless we explicitly tell it not to allow any, but unfortunately we will still encounter any in other libraries even though we do not in our .ts source file.

I think for these two cases, we can do a simple type check and report errors if there are type conflicts.

If the type of one operand is a sub-type of the other, maybe we can instantiate any by the super type?