¿Qué significa realmente una firma de índice TypeScript?

He estado escribiendo TypeScript por un tiempo y estoy confundido sobre lo que significa una firma de índice. Por ejemplo, este código es legal: function fn(obj: { [x: string]: number }) { let n: number = obj.something; } Pero este código, que hace básicamente lo mismo, no es: function fn(obj:...