1. ホーム
  2. requirejs

[解決済み] typescriptから.d.tsなしで外部の非typescriptライブラリを使用するには?

2023-01-02 15:15:18

質問

.htmlファイルでこれらを定義しています。

<script type="text/javascript" src="bower_components/tree.js/tree.min.js"></script>
<script type="text/javascript" src="bower_components/q/q.js"></script>
<script type="text/javascript" src="test.js"></script>

次にtest.jsで。

 var myTree = Tree.tree({})

しかし、Typescript は次のようにエラーになります: "Cannot find name 'Tree'"

また、コンパイル時に --module amd でコンパイルし import Tree = require("model/tree"); を test.js ファイルの先頭に配置しても、またエラーになります。 Cannot find external module 'model/tree'. しかし、明らかに有効なインポートであるはずです。 https://github.com/marmelab/tree.js/blob/master/src/main.js

私は ではない は、使用したい外部 javascript ファイルごとに .d.ts ファイルを書きたいのですが、それは本当に Typescript が私にさせたいことなのでしょうか?

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

利用したい外部 javascript ファイルごとに .d.ts ファイルを書きたくないのですが、これは本当に Typescript が私にやらせたいことなのでしょうか?

いいえ、最もシンプルで迅速な解決策は、単純に、何らかの変数 Tree があると伝えることです。これは次のように簡単です。

declare var Tree:any; // Magic
var myTree = Tree.tree({})

TypeSafetyはTypeScriptではスライド式になっています。この場合、コンパイラに対して、以下のようなものがあることを伝えているだけである。 Tree というものがあることをコンパイラに伝えているだけで、それ以上の型安全性にはあまり関心がない。 が存在するという事実以上の型安全性は気にしません。 .

もっと見る

IMHO ライン declare var Tree:any; という行は、他のJS検証ツールがコードに存在しない変数の使用を宣言するために書かせるよりも、はるかにシンプルな構文です。

更新

interface ITree {
    .. further methods and properties...
}

interface ITreeFactory {
    tree(input: { [key: string]: any }): Itree
};

declare var Tree: ITreeFactory; // magic...