Creo una nueva interfaz para String para agregar algunos métodos de utilidad utilizando la técnica de parches de mono.
interface String { toCamelCase(): string; } String.prototype.toCamelCase = function (): string { return this.replace(/[^az ]/gi, '').replace( /(?:^\w|[AZ]|\b\w|\s+)/g, (match: any, index: number) => { return +match === 0 ? '' : match[index === 0 ? 'toLowerCase' : 'toUpperCase'](); }, ); };en mi controlador cuando llamo a esta nueva función: toCamelCase:
const str: string = 'this is an example'; const result = str.toCamelCase(); console.log(result);tengo este error:
[Nest] 35664 - ERROR [ExceptionsHandler] str.toCamelCase no es una función TypeError: str.toCamelCase no es una función
¿Qué tiene de malo esta implementación?
En lugar de contaminar el prototipo de String , sugeriría crear una función camelCase(str: string): string que toma la cadena que desea convertir en camel case y la devuelve después de ser camelCased. Algo como
export const camelCase = (str: string): string => { return str.replace(/[^az ]/gi, '').replace( /(?:^\w|[AZ]|\b\w|\s+)/g, (match: any, index: number) => { return +match === 0 ? '' : match[index === 0 ? 'toLowerCase' : 'toUpperCase'](); }, ); } Y ahora se puede importar como import { camelCase } from './utilties'; y llamado como camelCase('Hello World!');
Esto conducirá a que la función sea más independiente, robusta y más fácil de probar que intentar modificar el prototipo de String , además, la modificación del prototipo ya no es común.