Inspirado en esta publicación.
Esta es una aplicación de muestra desarrollada con ASP clásico y mecanografiado.
A veces simplemente nos quedamos atrapados con aplicaciones antiguas que se ejecutan en ASP clásico.
TypeScript agrega herramientas útiles para el desarrollo como IntelliSense, refactorización, un sistema de clases real, un sistema de tipos, errores en tiempo de compilación, autocompletado, jsdocs y más.
Se puede utilizar en aplicaciones existentes, compartiendo código y estado de sesión.
Además, fue divertido hacerlo :)
Para recuperar los paquetes js y css de nuget, ejecute el comando Update-Package -Reinstall desde la consola del administrador de paquetes.
El paquete handlebars.TypeScript.DefinitelyTyped instala dos archivos .d.ts, es necesario eliminar el de la versión 1.0.0.
Se ejecuta en IIS Express, se puede ejecutar directamente desde Visual Studio (sin depurar).
Los scripts se ejecutan en ASP clásico en el siguiente orden:
<script runat="server"> que no coincida con el idioma predeterminado;<% %> );<script runat="server"> que coincida con el idioma predeterminado. Para poder ejecutar la función main() después de los scripts incluidos, el idioma predeterminado actual se mantuvo como VBScript con la directiva <%@ language="VBScript" %> .
Una opción para usar mecanografiado con asp sería agregar un paso al proceso de compilación que incluya el contenido en etiquetas asp y cambie la extensión a .asp.
Fuente
Algunas configuraciones importantes para mecanografiado cuando se apunta a ASP clásico:
{
"compilerOptions" : {
"target" : "es3" ,
"lib" : [ "es5" , "scripthost" ] ,
"module" : "none"
}
}ASP puede ejecutarse con VBScript o JScript, que es la versión de javascript de Microsoft y cumple con la especificación ECMAScript 3.
Las bibliotecas de tipos predeterminadas que utiliza Typecript incluyen nuevas API de navegador que definen un objeto Solicitud y Respuesta, por lo que tenemos que definir las bibliotecas que queremos usar para poder definir estos objetos con la API de ASP.
Finalmente, asp no admite ninguna de las posibles salidas del módulo.
El código del lado del servidor generado tendrá la extensión .js, que IIS normalmente envía al cliente. Para ocultar las fuentes de asp, podemos agregar la siguiente configuración:
<!-- IIS 7+ -->
< system .webServer>
< security >
< requestFiltering >
< hiddenSegments >
< add segment = " src " />
</ hiddenSegments >
</ requestFiltering >
</ security >
</ system .webServer>Esta configuración no funciona para IIS 6 o inferior.
Para esta aplicación, en lugar de utilizar diferentes archivos .asp, incluidas las fuentes js necesarias, se utilizó un flujo de trabajo mvc con un único punto de entrada, Default.asp, enrutamiento con parámetros QueryString.
Otra opción sería redirigir los errores 404 a un archivo asp, que realiza el enrutamiento leyendo la ruta intentada.
La sintaxis que utiliza ASP clásico para configurar el estado de la sesión o de la aplicación no es compatible con TypeScript:
<%
Session("user_id") = 1
Application("connectionstring") = "some string"
%>
La alternativa sería definir una función para configurarlos y declarar la interfaz en formato mecanografiado. P.ej:
function setSession ( key , val ) {
Session ( key ) = val ;
}Luego en letra mecanografiada:
declare function setSession ( key : string , val : any ) : void ; Desafortunadamente, el objeto Error de JScript no define la propiedad de la pila, por lo que no existe una manera fácil de crear un seguimiento de la pila, ya que los métodos del objeto se emiten como funciones anónimas mediante mecanografiado.
Esta aplicación utiliza manillares para crear plantillas y Moment.js para manejar fechas. Ambos tienen una estructura UMD (Universal Module Definición), que no es compatible con el asp clásico, ya que el objeto global no existe.
En ASP JScript clásico, una variable en un cierre se "exporta" al ámbito global si se define sin ser declarada. P.ej:
( function ( ) {
var localFn = function ( ) {
// ...
} ;
// classic asp export
// this makes globalFn available in the global scope
globalFn = localFn ;
} ) ;Debido a este comportamiento, es necesario reemplazar las comprobaciones UMD en ambas bibliotecas con esta sintaxis de "exportación".
Tenga en cuenta que solo funcionarán las bibliotecas que no dependen del DOM.