我似乎无法理解为什么以下代码不会引发错误:
var rg: {(): void;}[] = [];
rg.push(function():string {return "";})
Run Code Online (Sandbox Code Playgroud)
我清楚地声明类型应该是一个返回的函数数组void,但是我推送一个函数返回一个string但编译器没有抱怨.如果我改变定义rg为
var rg: {():number;}[] = [];
Run Code Online (Sandbox Code Playgroud)
编译器开始抱怨.
这是一个错误,或者它是如何工作的void返回类型(即如果void使用任何东西,基本上使它与返回类型相同any)?
我试图了解开关在飞镖中是如何工作的.我有非常简单的代码:
methodname(num radians) {
switch (radians) {
case 0:
// do something
break;
case PI:
// do something else
break;
}
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这不起作用.如果保留为此错误是:case表达式必须具有相同的类型(我的类型是num,但不是编辑器).如果我将0更改为0.0则表示:切换类型表达式double不能覆盖==运算符 - 我不知道这意味着什么!
那么切换案例的方法是什么?我可以将它转换为if/else可能但我想知道如何使开关工作,为什么它不起作用.
我正在运行最新的DartEditor稳定版本.
请有人可以帮忙吗?
在AMD中(在requirejs中实现),可以定义要包含为依赖项的模块,例如:
define(['require','exports'], function(require, exports) {
var externalDep = require('path/to/depModule');
// Use the module somewhere.
});
Run Code Online (Sandbox Code Playgroud)
我已经尝试了--module amd,它正确输出了requirejs可用的AMD模块.
是否可以在TypeScript源文件的源代码中定义依赖关系,转换为类似上面的示例?
我正在看这个主题:https://groups.google.com/a/dartlang.org/forum/#!topic / misc/pv-Uaq8FGI,但仍无法找到我希望在客户端上拥有的解决方案方(也可能在服务器上).
我想应该有一种方法为数据结构提供标准格式,在JS land中表示为JSON对象(例如json schema或yaml或者其他),可以用作生成包含fromJSON构造函数的Dart类的输入. toJSON方法(可能对数据范围进行一些检查),如果需要通过线路传输的数据需要额外的逻辑,开发人员可以扩展.
如果可能的话我不想使用镜像,而是应该静态生成类(即运行工具 - >获取类以匹配最新的模式/输入).
你能指出我正确的方向吗?
谢谢.
所以我看到这样的代码:
class Whatever {
final String name;
const Whatever(this.name);
}
Run Code Online (Sandbox Code Playgroud)
构造函数被标记为事实会发生什么变化const?它有什么作用吗?
我读了这个:
对要用作编译时常量的变量使用const。如果const变量在类级别,则将其标记为静态const。(实例变量不能为常量。)
但这对于类构造函数似乎没有意义。
我已经编写了一些代码,并且希望在程序包中提供它,但是我也想将它作为工作人员提供给程序包使用者。为此,我创建了一个包装类,该包装类在内部运行隔离,并使用send命令,并且侦听器与隔离通信以提供功能。
当我要从bin或web目录使用此包装器类时,就会出现问题:所Uri提供的是从运行目录/主目录的目录Isolate而不是软件包根目录插入的。因为bin它是packagename|bin/,因为web它是packagename|web。
我想将此类导出给使用者,以便他们可以选择比构造自己的方法更简单的方法Isolate,但是我不确定如何指定将在spawnUri中使用的主文件。
有没有一种方法可以指定文件,因此无论从何处运行主隔离,它都将始终解析为正确的文件。
结构体:
// Exports the next file so the class in it will be package visible
packageroot -> lib/package_exports_code_that_spawns_isolate.dart
// This file should contain URI that always resolve to the next file
packageroot -> lib/code_that_spawns_isolate.dart
// The main worker/Isolate file
packageroot -> lib/src/worker/worker.dart
Run Code Online (Sandbox Code Playgroud)
谢谢。
我有以下界面:
interface SMJSPacket {
header: {
tag: string;
method: string;
type: string;
};
response?: {
status: string;
content: string;
};
event?: {
key?: string;
action?: string;
};
request?: {
run?: string;
};
}
Run Code Online (Sandbox Code Playgroud)
然后我想将它作为一个类实现,并在构造函数中设置属性:
class Request implements SMJSPacket {
constructor(data: any, method: string) {
this.header = {
type: 'request',
method: method || 'calld',
tag: Request.getTag()
}
this.request = data;
}
static getTag(): string {
return '_' + goog.now() + '_' + utils.getRandomBetween(1, 1000);
}
}
Run Code Online (Sandbox Code Playgroud)
但是根据编译器Request没有实现接口.我不明白如何检查它,虽然它根据构造阶段的界面填充了一切,如果用JavaScript编写,这将工作正常,类型检查Closure工具中的相同的东西也完美.我的想法是,我想将接口实现为类,因此我可以在原型中使用实用程序方法,但仍然可以轻松地转换为JSON字符串.
有任何想法吗?
谢谢
我有点困惑:我可以覆盖一个setter/getter但仍然使用super setter/getter吗?如果是 - 如何?
使用案例:
class A {
void set value(num a) {
// do something smart here
}
}
class B extends A {
void set value(num a) {
// call parent setter and then do something even smarter
}
}
Run Code Online (Sandbox Code Playgroud)
如果这不可能,那么如何仍然保留API但扩展新类中的逻辑.代码的用户已经使用了instance.value = ...所以我不想将其更改为方法调用是可能的.
请帮忙:)
所以我试图将一个小的实用程序代码从 JS 迁移到 Dart,并且我努力寻找如何执行以下操作:
注册表用于将 Class 映射到返回 DifferentClass 新实例的函数。
typedef DifferentClass InstanceGenerator();
Map<Type, InstanceGenerator> _registry;
_registry[ClassDefinition] = () => new DifferentClass();
// at runtime
var a = new ClassDefinition();
var b = _registry[a.runtimeType](); // should resolve to instance of DifferentClass.
Run Code Online (Sandbox Code Playgroud)
这一切都工作得很好,但我目前面临的问题是我需要能够在任何类的范围之外并且基本上在库级别添加到注册表。在 JS 中,这是作为顶级调用实现的,但在 Dart 中,这似乎是不允许的(DartEditor 说“不”)。
我如何在 Dart 中执行此模式:基本上,我需要为每个类注册一个函数,该函数解析为另一个类的实例,并在运行时根据第一个类实例的运行时类型创建为其注册的函数。
目前它看起来像这样:
library whatever;
class ABC {}
Registry.instance.register(ABC, () => new DEF()); // This does not work.
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
module array {
export function contains(arr: Array, item: any): bool { // implementation }
}
Run Code Online (Sandbox Code Playgroud)
我希望能够拥有的是union类型(在上面的示例中,可能是Node,NodeList和IArguments)或导出函数的多个签名.我似乎无法做到.
我尝试使用不同的参数类型多次声明函数,但是编译器抱怨缺少return语句 - 没有证据证明只用于参数类型检查的声明的实现(并使代码冗长).我认为更好的方法是拥有工会类型,不是吗?
所以问题是:我如何实现类型检查,其中允许的参数是不同类型的(在这种情况下 - 数组像对象),但实现是相同的,而不必复制/粘贴实现(基本上是一个简单的'return false'可能会在最后一个之前的声明中做,但看起来仍然是一个坏主意).
我想知道有没有办法在子类中使用命名的可选参数。
前任:
class A {
num min;
num max;
A({min: 1, max: 10});
}
class B extends A {
num step;
B({min: 2, max, step: 1}) : super(min, max);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,所以我想知道会怎样。
主要思想是我对一个类进行子类化并覆盖方法,也许我在子类中有一个额外的可选参数,但我想重用超类参数。我如何在 Dart 中做到这一点?