5 ms·
Those sound like the same thing to me.
by bluepnume 4y ago
Those sound like the same thing to me.
- blowski 4y agoConsider a ‘dump’ function. By design, it handles anything you throw at it - strings, objects, booleans, etc. It won’t change. That’s ‘Any’. Whereas ‘Unknown’ might be a stepping stone to introduce a more specific type once all the use cases are known. I let it handle strings and integers, log a line about any other type that calls it, and continue behaviour as it is today.
- dtech 4y agoSuch a `dump` function would be 100% the same with unknown, since all types can be converted to top types (both any and unknown in TS)
- badlucklottery 4y agoThe difference comes when you interface with other well-typed code and want to convert from any/unknown down to a specific type. For example: function handleString(s: string) { //... } declare const a: any; declare const u: unknown; handleString(a); // works with zero intervention handleString(u); // error: Argument of type 'unknown' is not assignable to parameter of type 'string' handleString(u as string); // works again with explicit re-typing
- capableweb 4y agoA dump function accepting "unknown" is signalling "I'm not sure what this function could handle, probably a lot of different types" vs accepting "any" where it's telling you "I can accept any type you throw at me".
- bigyikes 4y agoHere’s how I think about it, in much looser terms: unknown = I don’t know any = I don’t care Often the implications are the same, but as you can intuit, any is a lot more relaxed. Any will work anywhere because you just don’t care what the type is. Unknown is stricter. It won’t work in cases where other types expect you to know what type you’re dealing with. The compiler treats unknown very cautiously, whereas you can slap an any on pretty much anything.
- capableweb 4y agoThey're the same as much as "1 + 1 = 2" and "2 + 0 = 2" is the same. The result might be the same ("any" and "unknown" accepting any type) but again, the intent is different (a value we know can be anything vs a value we don't know what type it'll have).