3 ms·
For example in typescript this is valid: type A = {name: string} type B = {name: string} function print(obj: A) { alert(obj.name);} let a: A =
by tigershark 8y ago
For example in typescript this is valid:
type A = {name: string}
type B = {name: string}
function print(obj: A) { alert(obj.name);}
let a: A = {name: “hello”};
let b: B = {name: “world”}
print(a);
print(b);
This is because of typescript structural equality and I think that the same applies to flow given your link.
Obviously if I want a function to accept an email I don’t want the same function to accept an address, but in typescript you can’t guarantee it because you have no way to get rid of structural equality as far as I understood.
- jamesisaac 8y agoAh I see. That can be achieved since Flow 0.51 with opaque types[1][2]. It seems like TypeScript hasn't yet caught up with this functionality[3]. [1] https://medium.com/flow-type/hiding-implementation-details-with-flows-new-opaque-type-aliases-feature-40e188c2a3f9 https://medium.com/flow-type/hiding-implementation-details-w... [2] https://flow.org/en/docs/types/opaque-types/ https://flow.org/en/docs/types/opaque-types/ [3] https://github.com/Microsoft/TypeScript/issues/15807#issuecomment-301196459 https://github.com/Microsoft/TypeScript/issues/15807#issueco...
- tigershark 8y agoYup that seems to help.
- zeugmasyllepsis 8y agoI'm certainly not well versed in OCaml, but my understanding is that it is also structurally typed. This particular example would also be permitted in OCaml, correct?