react number convert bool javascript typescript override tostring

javascript - convert - react number to string



OverScript de TypeScript ToString() (2)

Anulando a trabajos de cuerdas como se espera:

class Foo { private id: number = 23423; public toString = () : string => { return `Foo (id: ${this.id})`; } } class Bar extends Foo { private name:string = "Some name"; public toString = () : string => { return `Bar (${this.name})`; } } let a: Foo = new Foo(); // Calling log like this will not automatically invoke toString console.log(a); // outputs: Foo { id: 23423, toString: [Function] } // To string will be called when concatinating strings console.log("" + a); // outputs: Foo (id: 23423) console.log(`${a}`); // outputs: Foo (id: 23423) // and for overridden to string in subclass.. let b: Bar = new Bar(); console.log(b); // outputs: Bar { id: 23423, toString: [Function], name: ''Some name'' } console.log("" + b); // outputs: Bar (Some name) console.log(`${b}`); // outputs: Bar (Some name) // This also works as wxpected; toString is run on Bar instance. let c: Foo = new Bar(); console.log(c); // outputs: Bar { id: 23423, toString: [Function], name: ''Some name'' } console.log("" + c); // outputs: Bar (Some name) console.log(`${c}`); // outputs: Bar (Some name)

Sin embargo, lo que a veces puede ser un problema es que no es posible obtener el toString de una clase padre.

console.log("" + (<Foo>(new Bar())));

Ejecutará el toString en Bar, no en Foo.

Digamos que tengo una Person clase que se parece a esto:

class Person { constructor( public firstName: string, public lastName: string, public age: number ) {} }

¿Es posible anular el método toString() en esta clase, por lo que podría hacer algo como lo siguiente?

function alertMessage(message: string) { alert(message); } alertMessage(new Person(''John'', ''Smith'', 20));

Esta anulación podría tener este aspecto:

public toString(): string { return this.firstName + '' '' + this.lastName; }

Edición: Esto realmente funciona. Vea las respuestas a continuación para más detalles.


Como lo señaló @Kruga, el ejemplo parecía funcionar en JavaScript en tiempo de ejecución. El único problema con esto es que TypeScript muestra un error de tipo .

TS2345: El argumento de tipo ''Persona'' no se puede asignar al parámetro de tipo ''cadena''.

Para resolver este mensaje, debe:

  • Llama a .toString() explícitamente
  • O concatene el objeto con una cadena (por ejemplo, `${obj}` u obj + '''' )
  • O use obj as any (no recomendado, ya que perderá la seguridad del tipo)