Existe algum exemplo de uso do TypeScript com o KnockoutJS? Só estou curioso para saber como eles trabalhariam juntos.
Editar
Aqui está o que eu tenho, parece funcionar
declare var ko: any;
declare var $: any;
class ViewModel {
x = ko.observable(10);
y = ko.observable(10);
}
$(() => {
ko.applyBindings(new ViewModel());
});
Isso gera o seguinte Javascript:
var ViewModel = (function () {
function ViewModel() {
this.x = ko.observable(10);
this.y = ko.observable(10);
}
return ViewModel;
})();
$(function () {
ko.applyBindings(new ViewModel());
});
knockout.js
typescript
CallumVass
fonte
fonte
ko.observable<number>(10)
. Eu escrevi um blogpost com algumas informações mais detalhadas: ideasof.andersaberg.com/idea/12/...Respostas:
Veja DefinitelyTyped .
"Repositório de definições de tipo TypeScript para bibliotecas JavaScript populares"
fonte
/// <reference path="knockout-2.2.d.ts" />
à parte superior do seu arquivo .ts para que ele pegue as definições.Eu fiz essa pequena interface para obter tipos estáticos para o Knockout:
Coloque-o em "Knockout.d.ts" e faça referência a partir de seus próprios arquivos. Como você pode ver, ele se beneficiaria muito com os genéricos (que são fornecidos de acordo com as especificações).
Eu fiz apenas algumas interfaces para ko.observable (), mas ko.computed () e ko.observableArray () podem ser facilmente adicionados no mesmo padrão. Atualização: Corrigi as assinaturas de subscribe () e adicionei exemplos de computed () e observableArray ().
Para usar em seu próprio arquivo, adicione-o na parte superior:
fonte
x = 'hello'
em JS, não sabemos se você pretendeu dizer em algum lugar posteriormentex = 34
. Portanto, não podemos deduzir nada sobre o tipo de x.Tente minha realização das declarações da interface TypeScript (com exemplo simples)
https://github.com/sv01a/TypeScript-Knockoutjs
fonte
Nada mudaria em termos da maneira como as ligações de knockout são declaradas na marcação, no entanto, obteríamos a bondade intellisense assim que as interfaces fossem escritas para a biblioteca de knockout. Nesse aspecto, funcionaria exatamente como o jquery Sample , que possui um arquivo datilografado contendo interfaces para a maioria das APIs do jQuery .
Eu acho que se você se livrar das duas declarações de variáveis para ko e $, seu código funcionará. Eles estão ocultando as variáveis ko e $ reais que foram criadas quando os scripts knockout e jquery foram carregados.
Eu tive que fazer isso para portar o projeto de modelo do visual studio para nocaute:
app.ts:
default.htm:
fonte
Ok, basta usar o seguinte comando para importar os tipos de knockout ou tds.
Isso criará um diretório @types no diretório node_modules do seu projeto e o arquivo de definição do tipo knockout do índice estará em um diretório chamado knockout. Em seguida, através de uma referência de barra tripla para o arquivo de tipos. Isso fornecerá ótimos recursos de IDE e TypeScript.
Por fim, basta usar uma declaração declare para trazer a variável ko para o escopo. Isso é fortemente tipado, então olá intellisense.
Então agora você pode usar o KO como nos seus arquivos javascript.
Espero que isto ajude.
fonte
Estou usando https://www.nuget.org/packages/knockout.editables.TypeScript.DefinitelyTyped/ e possui todas as interfaces para o Knockout.
fonte