¿Hay alguna muestra del uso de TypeScript con KnockoutJS? ¿Tengo curiosidad por saber cómo trabajarían juntos?
Editar
Esto es lo que tengo, parece funcionar.
declare var ko: any;
declare var $: any;
class ViewModel {
x = ko.observable(10);
y = ko.observable(10);
}
$(() => {
ko.applyBindings(new ViewModel());
});
Esto genera el siguiente 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
fuente
fuente
ko.observable<number>(10)
. Escribí una publicación de blog conRespuestas:
Mira DefinitelyTyped .
"Depósito de definiciones de tipos de TypeScript para bibliotecas populares de JavaScript"
fuente
/// <reference path="knockout-2.2.d.ts" />
a la parte superior de su archivo .ts para que recoja las definiciones.Hice esta pequeña interfaz para obtener tipos estáticos para Knockout:
Póngalo en "Knockout.d.ts" y luego haga referencia a él desde sus propios archivos. Como puede ver, se beneficiaría enormemente de los genéricos (que vienen de acuerdo con las especificaciones).
Solo hice algunas interfaces para ko.observable (), pero ko.computed () y ko.observableArray () se pueden agregar fácilmente en el mismo patrón. Actualización: arreglé las firmas para subscribe () y agregué ejemplos de computed () y observableArray ().
Para usar desde su propio archivo, agregue esto en la parte superior:
fuente
x = 'hello'
en JS, no sabemos si tenía la intención de decirlo en algún lugar posterior de su códigox = 34
. Hance no podemos inferir nada sobre el tipo de x.Pruebe mi realización de declaraciones de interfaz TypeScript (con un ejemplo simple)
https://github.com/sv01a/TypeScript-Knockoutjs
fuente
Nada cambiaría en términos de la forma en que se declaran los enlaces de eliminación en el marcado; sin embargo, obtendríamos la bondad intellisense una vez que las interfaces se escriban para la biblioteca de eliminación. A este respecto, funcionaría igual que la muestra jquery , que tiene un archivo de mecanografía que contiene interfaces para la mayoría de la API jQuery .
Creo que si se deshace de las dos declaraciones de variables para ko y $, su código funcionará. Estos están ocultando las variables ko y $ reales que se crearon cuando se cargaron las secuencias de comandos knockout y jquery.
Tuve que hacer esto para portar el proyecto de plantilla de Visual Studio para eliminar:
app.ts:
default.htm:
fuente
Ok, solo use el siguiente comando para importar los tipos de eliminación o tds.
Esto creará un directorio @types en el directorio node_modules de su proyecto y el archivo de definición de tipo de eliminación de índice estará en un directorio llamado eliminación. A continuación, a través de una referencia de triple barra al archivo de tipos. Esto le dará excelentes características de IDE y TypeScript.
Finalmente, solo use una declaración de declaración para llevar la variable ko al alcance. Esto está fuertemente tipado, así que hola intellisense.
Entonces ahora puede usar KO al igual que en sus archivos javascript.
Espero que esto ayude.
fuente
Estoy usando https://www.nuget.org/packages/knockout.editables.TypeScript.DefinitelyTyped/ y tiene todas las interfaces para Knockout.
fuente