3

I have some const like this

export class CustomerType {
  static readonly main = 'mainCustomer';
  static readonly additional = 'additionalCustomer';
}

And I have

const value = 'main'

Is it possible to check does value exist in CustomerType and return true or false? I know that I can use include when is an array but this is class?

Miomir Dancevic
  • 6,726
  • 15
  • 74
  • 142

2 Answers2

4

You can use Object.keys() to get all properties on the class and then use Array.prototype.includes() to see if it is contained:

class CustomerType {
  static readonly main = 'mainCustomer';
  static readonly additional = 'additionalCustomer';
}

const value = 'main'


console.log(Object.keys(CustomerType).includes(value))

You can see this working in the typescript playground.

Alexander Nied
  • 12,804
  • 4
  • 25
  • 45
1
type valueType = keyof typeof CustomerType

const value: valueType = 'main'; // no error

const value2: valueType = 'something else'; // throws typescript error

See an example in the typescript playground here.

Gordon
  • 4,823
  • 4
  • 38
  • 55
  • 1
    This is an interesting answer- I had to do some research to [understand how `keyof typeof` worked](https://stackoverflow.com/questions/55377365/what-does-keyof-typeof-mean-in-typescript). But it seems it could definitely be used as a means of detecting a value was a property of the object. – Alexander Nied Feb 03 '22 at 15:43