DEV Community

Cover image for Nano "Typescript" without compilation
Eckehard
Eckehard

Posted on • Updated on

Nano "Typescript" without compilation

Thanks to this post from Toby Farley (Shadow Chicken), I had an inspiration to build my own tiny little nano "typescript" running without compilation.

Ok, typescript provides much more, but if you only need some typechecks, this little routine would do the trick:

/* ==================================================
    Nano typeCheck
    Valid types
    "var": Variant - all types allowed 
    "string"
    "number"
    "bigInt"
    "boolean"
    "object"
    "array"
    "date"
    "set"
    "function"
  ================================================== */
  function typeCheck(v) {
  if ((typeof v) !== "object") throw (`Parameter must be Object in function ${typeCheck.caller.name}`)

  // Build return value array
  let res = Object.entries(v).map((a, i) => {
    let [typ, val] = a;  // get key/values
    typ = typ.charAt(0).toUpperCase() + typ.slice(1) // Capitalize
    if (typ === "Var")  // Variant type
      return val
    if (val.constructor.name !== typ) // check type
      throw (`Type error parameter ${i + 1} is not ${typ} in function ${typeCheck.caller.name}`)
    return (val)
  })
  return res
}

function myFunc(a,b,c,d) {
  typeCheck({ string: a, boolean: b, array: c, var: d })
  console.log(a)
  console.log(b)
  console.log(c)
  console.log(d)
}

myFunc( "5",  true, [1, 2, 3, 4, 5], "Do what you want")
Enter fullscreen mode Exit fullscreen mode

You can also submit typ declaration with the parameters like this:

function myFunc(pars) {
  let [a, b, c, d] = typeCheck(pars)
  console.log(a)
  console.log(b)
  console.log(c)
  console.log(d)
}

myFunc({ string: "5", boolean: true, array: [1, 2, 3, 4, 5], var: "Do what you want" })
Enter fullscreen mode Exit fullscreen mode

Types can be named using the standard type names with lower or upper case, so both would be accepted:

{ string: a, boolean: b, array: c, var: d }
{ String: a, Boolean: b, Array: c, Var: d }
Enter fullscreen mode Exit fullscreen mode

Tell me, what you think.

P.S.: This post was changed after the first sumbission to show different ways of usage.

Top comments (5)

Collapse
 
rudransh61 profile image
Rudransh Bhardwaj • Edited

wow !!
this is awesome !!
I think it's already very great
you can add more unique features
it can be next big thing

nice

Collapse
 
lexlohr profile image
Alex Lohr

The main benefit of Typescript is that it catches type unsoundness in development without the need to add code to the production bundle.

Checking types in production is the field of scheme libraries. While your solution is interesting as an example, it cannot compete with scheme libraries like valibot or zod.

Collapse
 
efpage profile image
Eckehard

Be serious: does it look like the next big thing? It's just an example, but I like the sceme....

Collapse
 
lexlohr profile image
Alex Lohr

No, not really. I just wanted to point out that this is something different than TypeScript and that others have found a niche for similar solutions that even work very well together with TypeScript.

Collapse
 
artydev profile image
artydev

Nice, but I agree with Alex, at runtime, zod is a must