Inspirado nesta postagem.
Este é um exemplo de aplicativo desenvolvido com asp clássico e texto digitado.
Às vezes ficamos simplesmente presos a aplicativos antigos rodando em asp clássico.
TypeScript adiciona ferramentas úteis para desenvolvimento como IntelliSense, refatoração, um sistema de classes reais, um sistema de tipos, erros de tempo de compilação, preenchimento automático, jsdocs e muito mais.
Ele pode ser usado em aplicações existentes, compartilhando código e estado de sessão.
Além disso, foi divertido de fazer :)
Para buscar os pacotes js e css do nuget, execute o comando Update-Package -Reinstall
no console do gerenciador de pacotes.
O pacote handlebars.TypeScript.DefinitelyTyped instala dois arquivos .d.ts, é necessário deletar aquele da versão 1.0.0.
Ele roda em IIS Express, pode ser executado diretamente do visual studio (sem depuração).
Os scripts são executados em asp clássico na seguinte ordem:
<script runat="server">
que não correspondam ao idioma padrão;<% %>
);<script runat="server">
que correspondam ao idioma padrão. Para poder executar a função main()
após os scripts incluídos, a linguagem padrão atual foi mantida como VBScript com a diretiva <%@ language="VBScript" %>
.
Uma opção para usar TypeScript com asp seria adicionar uma etapa ao processo de construção que inclua o conteúdo em tags asp e altere a extensão para .asp.
Fonte
Algumas configurações importantes para TypeScript ao direcionar o asp clássico:
{
"compilerOptions" : {
"target" : "es3" ,
"lib" : [ "es5" , "scripthost" ] ,
"module" : "none"
}
}
ASP pode ser executado com VBScript ou JScript, que é a versão de javascript da Microsoft e é compatível com a especificação ECMAScript 3.
As bibliotecas de tipo padrão que o TypeScript usa incluem novas APIs de navegador que definem um objeto Request e um objeto Response, então temos que definir as bibliotecas que queremos usar para podermos definir esses objetos com a API do ASP.
Finalmente, o asp não tem suporte para nenhuma das possíveis saídas do módulo.
O código do lado do servidor gerado terá extensão .js, que o IIS normalmente envia ao cliente. Para ocultar as fontes do asp, podemos adicionar a seguinte configuração:
<!-- IIS 7+ -->
< system .webServer>
< security >
< requestFiltering >
< hiddenSegments >
< add segment = " src " />
</ hiddenSegments >
</ requestFiltering >
</ security >
</ system .webServer>
Esta configuração não funciona para IIS 6 ou inferior.
Para esta aplicação, ao invés de utilizar diferentes arquivos .asp incluindo as fontes js necessárias, foi utilizado um fluxo de trabalho mvc com um único ponto de entrada, Default.asp, roteamento com parâmetros QueryString.
Outra opção seria redirecionar os erros 404 para um arquivo asp, que faz o roteamento lendo o caminho tentado.
A sintaxe clássica que o asp usa para definir o estado da sessão ou do aplicativo não é suportada pelo TypeScript:
<%
Session("user_id") = 1
Application("connectionstring") = "some string"
%>
A alternativa seria definir uma função para defini-los e declarar a interface em texto digitado. Por exemplo:
function setSession ( key , val ) {
Session ( key ) = val ;
}
Então, em texto datilografado:
declare function setSession ( key : string , val : any ) : void ;
Infelizmente, o objeto Error do JScript não define a propriedade stack, portanto não há uma maneira fácil de construir um stacktrace, uma vez que os métodos do objeto são emitidos como funções anônimas pelo TypeScript.
Este aplicativo usa Handlebars para modelagem e Moment.js para manipulação de datas. Ambos possuem uma estrutura UMD (Universal Module Definition), que não é compatível com o asp clássico, pois o objeto global não existe.
No JScript asp clássico, uma variável em um encerramento é "exportada" para o escopo global se for definida sem ser declarada. Por exemplo:
( function ( ) {
var localFn = function ( ) {
// ...
} ;
// classic asp export
// this makes globalFn available in the global scope
globalFn = localFn ;
} ) ;
Devido a este comportamento, é necessário substituir as verificações UMD em ambas as bibliotecas por esta sintaxe de "exportação".
Observe que apenas bibliotecas que não dependem do DOM funcionarão.