You are creating an alias to a type to be used in a specific context. How about this example:
typedef int INT32
That's all well and good, and if you only ever compiled for environments where an int was a 32-bit quantity you would not even need it. However, perhaps, some day in the future, you port your code to a system where a native int is 64 bits. Now your code may have some bugs if it assumes a 32-bit size for int's everywhere they are used. With the typedef, you need only change the argument:
typedef /*some 32 bit type*/ INT32
Note that this is only an example. The idea is abstracting the type away if it may change in the future or clears up your code.