# Keyof Type Operator

## [the keyof type operator permalink](/content/docs/handbook/2/keyof-types.html#the-keyof-type-operator/index.html) The `keyof` type operator

The `keyof` operator takes an object type and produces a string or numeric literal union of its keys.
The following type `P` is the same type as `type P = "x" | "y"`:

```
ts
type Point = { x: number; y: number };
type P = keyof Point;

type P = keyof Point
Try
```

If the type has a `string` or `number` index signature, `keyof` will return those types instead:

```
ts
type Arrayish = { [n: number]: unknown };
type A = keyof Arrayish;

type A = number

type Mapish = { [k: string]: boolean };
type M = keyof Mapish;

type M = string | number
Try
```

Note that in this example, `M` is `string | number` — this is because JavaScript object keys are always coerced to a string, so `obj[0]` is always the same as `obj["0"]`.

`keyof` types become especially useful when combined with mapped types, which we’ll learn more about later.

[**Generics** \\
\\
Types which take parameters](/content/docs/handbook/2/generics.html)

[**Typeof Type Operator** \\
\\
Using the typeof operator in type contexts.](/content/docs/handbook/2/typeof-types.html)
