1. ホーム
  2. typescript

String Prototypeを拡張し、Typescriptで使用するには?

2023-08-02 03:24:09

質問

Stringプロトタイプチェーンを新しいメソッドで拡張していますが、それを使おうとするとエラーが発生します。 property 'padZero' does not exist on type 'string' . 誰かが私のためにこれを解決することができますか?

コードは以下の通りです。また、Typescript Playgroundでも同じエラーを見ることができます。

interface NumberConstructor {
    padZero(length: number);
}
interface StringConstructor {
    padZero(length: number): string;
}
String.padZero = (length: number) => {
    var s = this;
    while (s.length < length) {
      s = '0' + s;
    }
    return s;
};
Number.padZero = function (length) {
    return String(this).padZero(length);
}

どのように解決するのですか?

を補強したい場合は class ではなく instance ではなく、コンストラクタを拡張します。

declare global {
  interface StringConstructor {
    padZero(s: string, length: number): string;
  }
}

String.padZero = (s: string, length: number) => {
  while (s.length < length) {
    s = '0' + s;
  }
  return s;
};

console.log(String.padZero('hi', 5))

export {}

*下部の空のエクスポートは、もし declare global.ts で、何もエクスポートしないでください。 これにより、ファイルがモジュールであることを強制します。*

もしあなたが、関数を instance (別名 prototype ),

declare global {
  interface String {
    padZero(length: number): string;
  }
}

String.prototype.padZero = function (length: number) {
  let d = String(this)
  while (d.length < length) {
    d = '0' + d;
  }
  return d;
};

console.log('hi'.padZero(5))

export {}