Вот еще одно решение, наиболее близкое к ожидаемому результату
function MyModule(str: string) {
return {
str,
methodA() {
this.str = this.str.toUpperCase() + '1';
return this;
},
methodB() {
this.str = this.str.toLowerCase() + '2';
return this;
},
methodC() {
this.str = str.substr(0, 4);
return this;
},
toString() {
return this.str;
},
valueOf() {
return this.str;
}
}
}
const myvar = MyModule('a parameter').methodA().methodB().methodC();
const myvar2 = MyModule('a parameter2').methodB().methodA();
console.log(`myvar: ${myvar}`);
console.log(`myvar2: ${myvar2}`);
вывод:
myvar: a pa
myvar2: A PARAMETER221
Но есть одна проблема, если вы console.log(myvar)
то вы увидит не строку, а объект. Чтобы достичь своей цели, вам нужно объединить эту переменную со строкой или просто вызвать метод .toString()
;
> console.log(myvar);
{
str: 'a pa',
methodA: [Function: methodA],
methodB: [Function: methodB],
methodC: [Function: methodC],
toString: [Function: toString],
valueOf: [Function: valueOf]
}
> console.log(myvar + myvar2);
a paA PARAMETER221
> console.log(myvar.toString());
a pa
> console.log('' + myvar);
a pa
> console.log(`${myvar}`);
a pa