gpt4 book ai didi

javascript - 使用 TypeScript 定义 Durandal ViewModel

转载 作者:搜寻专家 更新时间:2023-10-30 21:54:36 25 4
gpt4 key购买 nike

我该怎么做?

我见过的一些例子,看起来可怕,例如下面的,它读起来根本不像 OO 代码,因此如果 TypeScript 会成为 hack,它还有什么意义.由于没有类定义,我根本无法完全了解以下内容。所以我有一个编译代码,没有智能感知,无法强制封装等 - 那么为什么要浪费时间呢?

/// <reference path="../durandal/durandal.d.ts" />
/// <reference path="../../scripts/knockout.d.ts" />

import app = require("durandal/app");
import http = require("durandal/http");

export function activate() {
.
.
.
}

其他示例甚至更时髦,通过导出变量声明。

生成的代码并没有好多少,它对这个名为 exports 的变量进行 DI 并且代码只是不断地向它添加属性,这是没有意义的。

如果我用 javascript 编写这一切,我返回一个新对象可能是 JSON 符号——我能理解,一个适当的工厂方法/类。更少的工作,更干净,没有时间浪费在编译上。

有人能解释一下这是怎么回事吗?

  1. 为什么代码要在 DI-ed exports 对象上创建属性?这就像一个突变的引用传递。
  2. 是否有更面向对象的方式来做到这一点?我可以看到自己导出一个类,但这太奇怪了,违背了我认为正确和公正的一切。好吧,这有点夸张,但确实有这种感觉。

最佳答案

The resulting code is not much better, it's DI-ing this variable called exports And the code just keeps adding properties to it, which does not make sense.

这是 web (amd) 的工作方式。它依赖于 requirejs:http://requirejs.org/甚至 jquery(从 https://github.com/jquery/jquery/tree/master/src 中选择任何文件)也使用类似的模式,例如: https://github.com/jquery/jquery/blob/master/src/deferred.js#L1-L5

If I were to write this all in javascript, I return a new object may be in JSON notation - that I can understand, a proper factory method/class. A lot less work, cleaner and no time wasted compiling.

您也可以使用 TypeScript 执行此操作,方法是使用外部模块并使用 --out 标志进行编译。

Why is the code creating properties on a DI-ed exports object? It's like a mutant pass by reference. Is there a more OO way of doing this? I can see myself exporting a class, but this is just too weird and goes against everything I believe to be right and just. Ok that was an exaggeration, but sure feels that way.

您需要了解外部/内部模块。简而言之,外部模块依赖于模块系统(amd 用于浏览器,由例如 requirejs 提供,commonjs 用于服务器,例如 nodejs)。如果您从未听说过 amd/commonjs,您可能不应该在意。除了您尝试使用的库 (durandal) 需要您使用它。这意味着您的 JavaScript 代码不会像您想象的那么简单。

PS:我有一个解释 typescript 模块系统的视频:http://www.youtube.com/watch?hd=1&v=KDrWLMUY0R0

关于javascript - 使用 TypeScript 定义 Durandal ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22163970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com