Hacker News new | ask | show | jobs
by darepublic 1399 days ago
the type definition of the same is clearer imo and not only that it is enforced by both the ide and the compiler. Libraries typically DO NOT write a bunch of code examples of all the legitimate arguments that can be passed. Also in your example above,

> .addClass(function(node, i) {return 'name1'})

^ what is node? What is i? Seems intuitive to think it must be a dom reference and an index. But in different domains it's not always gonna be so clear. Like I am not familiar with umbrella js, but maybe node could be a jquery object and not a plain dom ref? With typescript you can just say

type GetClassName = (node: HTMLElement, i: index) => string | string[]

// see how I added string[]. So I don't have to add yet another example

// of a function returning a string array instead of a string

and then add it to the union of types that can be passed into addClass. Great, no more guessing based on the domain knowledge I have (or don't), it's crystal clear. And it forces the lib developer to have the discipline to make it crystal clear, which they usually don't I'm afraid.