How to write definition of type in function argument which is one of object properties with same type?
Example:
I have object:
type Article = {
name: string;
quantity: number;
priceNet: number;
priceGross: number;
};
and want to write function which summarise price depending on price type property:
function summarise(article: Article, priceTypeProperty: NeededProperty) {
return article[priceTypeProperty] * quantity;
}
How definition of NeededProperty
should look like to ensure typescript that it’s one of Article properties priceNet
or priceGross
and it is number
type?
2
Answers
Previous answer by Yaman Abd is correct, but I found little more pretty solution:
Solution
Explanation
keyof
makes string type from one of given object propertiesPick
is utility type that helps to select properties from Article type. So we are ensured that property is included in Article object type.This solution suggest properties which you can use while defining type
NeededType
.Example
So proper example look like this:
To achieve this you could use
keyof
and a type constraint to make sure that the parameter is one of the valid key names in theArticle
type and must be (priceNet
orpriceGross
) and its anumber
type