次の方法で共有


Office スクリプトでの TypeScript の制限

Office スクリプトでは、TypeScript 言語が使用されます。 ほとんどの場合、TypeScript または JavaScript コードは Office スクリプトで動作します。 ただし、コード エディターでは、スクリプトが Excel ブックで意図したとおりに一貫して動作するように、いくつかの制限が適用されます。

注:

Office スクリプトでは、TypeScript バージョン 4.0.3 が使用されます。 以降のバージョンで追加された TypeScript 機能は、Office スクリプトではサポートされていません。

Office スクリプトに 'any' 型がありません

は推論 できるため、TypeScript では型の記述は省略可能です。 ただし、Office スクリプトでは、変数を にすることはできません。 Office スクリプトでは、明示的な any と暗黙的なの両方を使用できません。 これらのケースはエラーとして報告されます。

any

Office スクリプト (つまり、let value: any;) でany型の変数を明示的に宣言することはできません。 anyの種類では、Excel で処理すると問題が発生します。 たとえば、 Range は、値が stringnumber、または booleanであることを認識する必要があります。 スクリプト内の any 型として変数が明示的に定義されている場合、コンパイル時エラー (スクリプトを実行する前にエラー) が発生します。

コード エディターのホバー テキスト内の明示的な 'any' メッセージ。

コンソール ウィンドウでの明示的な 'any' エラー。

前のスクリーンショットの [2, 14] Explicit Any is not allowed は、行 #2、列 #14 で any 型が定義されていることを示しています。 これは、エラーを見つけるのに役立ちます。

この問題を回避するには、常に変数の型を定義します。 変数の型が不明な場合は、 共用体型を使用できます。 これは、 Range 値を保持する変数に役立ちます。これは、 string型、 number型、または boolean 型 ( Range 値の型は、 string | number | booleanの和集合) です。

暗黙の any

TypeScript 変数型は 暗黙的に 定義できます。 TypeScript コンパイラが変数の型を判断できない場合 (型が明示的に定義されていないか、型推論が不可能であるため)、暗黙的な any になり、コンパイル時エラーが発生します。

コード エディターのホバー テキスト内の暗黙的な 'any' メッセージ。

暗黙的な any で最も一般的なケースは、 let value;などの変数宣言内にあります。 これを回避するには、次の 2 つの方法があります。

  • 変数を暗黙的に識別可能な型 (let value = 5; または let value = workbook.getWorksheet();) に割り当てます。
  • 変数を明示的に入力する (let value: number;)

継承する Office スクリプト クラスまたはインターフェイスなし

Office スクリプトで作成されたクラスとインターフェイスは、Office スクリプトのクラスまたはインターフェイスを 拡張または実装 できません。 言い換えると、 ExcelScript 名前空間内のサブクラスまたはサブインターフェイスを持つものは何もありません。

互換性のない TypeScript 関数

Office スクリプト API は、次では使用できません。

eval はサポートされていません

JavaScript eval 関数 は、セキュリティ上の理由からサポートされていません。

制限付き識別子

次の単語は、スクリプト内の識別子として使用できません。 これらは予約された用語です。

  • Excel
  • ExcelScript
  • console

配列コールバックの方向関数のみ

スクリプトでは、Array メソッドにコールバック引数を指定する場合にのみ矢印関数を使用できます。 これらのメソッドに識別子または "従来の" 関数を渡すことはできません。

const myArray = [1, 2, 3, 4, 5, 6];
let filteredArray = myArray.filter((x) => {
  return x % 2 === 0;
});
/*
  The following code generates a compiler error in the Office Scripts Code Editor.
  filteredArray = myArray.filter(function (x) {
    return x % 2 === 0;
  });
*/

ExcelScript型とユーザー定義型の和集合はサポートされていません

Office スクリプトは、実行時に同期コード ブロックから非同期コード ブロックに変換されます。 Promise を使用したブックとの通信は、スクリプト作成者には表示されません。 この変換では、ExcelScript型とユーザー定義型を含む共用体型はサポートされていません。 その場合は、 Promise がスクリプトに返されますが、Office スクリプト コンパイラはそれを想定していないため、スクリプト作成者は Promiseと対話できません。

次のコード サンプルは、 ExcelScript.Table とカスタム MyTable インターフェイスの間のサポートされていない共用体を示しています。

function main(workbook: ExcelScript.Workbook) {
  const selectedSheet = workbook.getActiveWorksheet();

  // This union is not supported.
  const tableOrMyTable: ExcelScript.Table | MyTable = selectedSheet.getTables()[0];

  // `getName` returns a promise that can't be resolved by the script.
  const name = tableOrMyTable.getName();

  // This logs "{}" instead of the table name.
  console.log(name);
}

interface MyTable {
  getName(): string
}

コンストラクターは Office スクリプト API と console ステートメントをサポートしていません

console ステートメントと多くの Office スクリプト API では、Excel ブックとの同期が必要です。 これらの同期では、スクリプトのコンパイル済みランタイム バージョンで await ステートメントが使用されます。 awaitコンストラクターではサポートされていません。 コンストラクターを持つクラスが必要な場合は、これらのコード ブロックで Office Scripts API または console ステートメントを使用しないでください。

次のコード サンプルは、このシナリオを示しています。 failed to load [code] [library]というエラーが生成されます。

function main(workbook: ExcelScript.Workbook) {
  class MyClass {
    constructor() {
      // Console statements and Office Scripts APIs aren't supported in constructors.
      console.log("This won't print.");
    }
  }

  let test = new MyClass();
}

パフォーマンスに関する警告

コード エディターの リンター は、スクリプトにパフォーマンスの問題がある可能性がある場合に警告を表示します。 ケースとその回避策については、「 Office スクリプトのパフォーマンスを向上させる」を参照してください。

外部 API 呼び出し

詳細については、「 Office スクリプトでの外部 API 呼び出しのサポート 」を参照してください。

関連項目