この投稿に触発されました。
これは、クラシック ASP と TypeScript で開発されたサンプル アプリケーションです。
場合によっては、クラシック ASP で古いアプリケーションが実行されているだけで立ち往生することがあります。
TypeScript には、IntelliSense、リファクタリング、実際のクラス システム、型システム、コンパイル時エラー、オートコンプリート、jsdocs などの開発に便利なツールが追加されています。
既存のアプリケーションで使用でき、コードとセッション状態を共有できます。
あと、やってて楽しかったです:)
nuget から js および css パッケージを取得するには、パッケージ マネージャー コンソールからコマンドUpdate-Package -Reinstall
を実行します。
handlebars.TypeScript.DefinitelyTyped パッケージは 2 つの .d.ts ファイルをインストールします。バージョン 1.0.0 のファイルは削除する必要があります。
IIS Express 上で実行され、Visual Studio から (デバッグなしで) 直接実行できます。
スクリプトは、クラシック ASP で次の順序で実行されます。
<script runat="server">
タグ。<% %>
内);<script runat="server">
タグ。組み込まれたスクリプトの後にmain()
関数を実行できるようにするために、現在のデフォルト言語はディレクティブ<%@ language="VBScript" %>
を使用して VBScript として維持されました。
ASP で TypeScript を使用する 1 つのオプションは、コンテンツを ASP タグで囲み、拡張子を .asp に変更するステップをビルド プロセスに追加することです。
ソース
クラシック ASP を対象とする場合の TypeScript の重要な構成をいくつか示します。
{
"compilerOptions" : {
"target" : "es3" ,
"lib" : [ "es5" , "scripthost" ] ,
"module" : "none"
}
}
ASP は、VBScript または Microsoft の JavaScript バージョンである JScript で実行でき、ECMAScript 3 仕様に準拠しています。
typescript が使用するデフォルトのタイプ ライブラリには、Request オブジェクトと Response オブジェクトを定義する新しいブラウザ API が含まれているため、ASP の API でこれらのオブジェクトを定義できるようにするには、使用するライブラリを定義する必要があります。
最後に、ASP は可能なモジュール出力を一切サポートしていません。
生成されたサーバー側コードには .js 拡張子が付き、通常、IIS はこれをクライアントに送信します。 ASP のソースを非表示にするには、次の構成を追加します。
<!-- IIS 7+ -->
< system .webServer>
< security >
< requestFiltering >
< hiddenSegments >
< add segment = " src " />
</ hiddenSegments >
</ requestFiltering >
</ security >
</ system .webServer>
この構成は、IIS 6 以前では機能しません。
このアプリケーションでは、必要な js ソースを含むさまざまな .asp ファイルを使用する代わりに、QueryString パラメーターを使用してルーティングする単一のエントリ ポイント Default.asp を備えた mvc ワークフローが使用されました。
もう 1 つのオプションは、404 エラーを ASP ファイルにリダイレクトし、試行されたパスを読み取るルーティングを実行することです。
従来の ASP がセッションやアプリケーションの状態を設定するために使用する構文は、typescript ではサポートされていません。
<%
Session("user_id") = 1
Application("connectionstring") = "some string"
%>
別の方法は、これらを設定する関数を定義し、typescript でインターフェイスを宣言することです。例えば:
function setSession ( key , val ) {
Session ( key ) = val ;
}
次に、タイプスクリプトで次のようにします。
declare function setSession ( key : string , val : any ) : void ;
残念ながら、JScript の Error オブジェクトはスタック プロパティを定義していないため、オブジェクトのメソッドは typescript によって匿名関数として出力されるため、スタックトレースを構築する簡単な方法はありません。
このアプリケーションは、テンプレート化に Handlebars を使用し、日付の処理に Moment.js を使用します。どちらも UMD (Universal Module Definition) 構造を持っていますが、グローバル オブジェクトが存在しないため、クラシック ASP と互換性がありません。
従来の ASP JScript では、クロージャ内の変数が宣言されずに定義されている場合、その変数はグローバル スコープに「エクスポート」されます。例えば:
( function ( ) {
var localFn = function ( ) {
// ...
} ;
// classic asp export
// this makes globalFn available in the global scope
globalFn = localFn ;
} ) ;
この動作のため、両方のライブラリの UMD チェックをこの「エクスポート」構文に置き換える必要があります。
DOM に依存しないライブラリのみが機能することに注意してください。