次の方法で共有


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

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

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

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

明示的 any

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

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

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

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

この問題を回避するには、常に変数の型を定義します。 変数の型が不明な場合は、 共用体型を使用できます。 これは、値を保持Rangeする変数に役立ちます。これは、型stringnumber、または 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対話できません。

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

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 呼び出しのサポート 」を参照してください。

関連項目