In the question I have asked why below snippet doesn't compile
type User = {
id: number;
kind: string;
};
function makeCustomer<T extend...
For further actions, you may consider blocking this person and/or reporting abuse
Good explanation, thanks!
Thanks for the good examples.
for the bug, i would say, we are overriding "kind" member with 'customer' no matter what. So the solution could be like checking if the kind member given by the argument. I would not call this as bug, i was expecting this behavior actually :)
but also the important thing is what is the expectation from the function. function says, makeCustomer, does not matter we are assigning to kind 'admin', 'hooman', or 'animal', eventually it sounds like we are making a customer :)
yet, it was good example :)
Thank you for putting together these exercises, they are really great for learning purposes!
I have a question regarding the bug you mention please. Isn't TS assuming the wrong
kind
because inmakeCustomer
you are overwriting the kind to becustomer
?Wouldn't the following solve the bug?
That would indeed fixed the issue, but the idea was to have constructor of the customer. Besides sense of this function (which is discussable) we can fix it by saying we will return specific kind. Pay attention that I needed to omit kind property from Admin type as having a join between {kind:'a'} & {kind: 'b'} creates never type as there is no intersection between them. Here is the code - typescriptlang.org/play?#code/C4Tw...
Cool, I didn't realize about the bug you mentioned, makes sense, thanks for sharing :)
Thanks for the great answer you have given!
A pleasure, it's a great way to improve my knowledge about TS.
I will be recommending this series to some of my colleagues.
Type is
Admin
but the structure which is returned haskind
property with valuecustomer
, so its not valid member of the typeAdmin
.