我对定义现有框架(openlayers.d.ts)很感兴趣,但无法弄清楚如何表达OpenLayers.Layer既是OpenLayers.Layer.Markers的类和命名空间这一事实.我相信这使得Markers成为Layer的嵌套类.
用法:
l = new OpenLayers.Layer(...); // this is a base class, never do this
m = new OpenLayers.Layer.Markers(...);
Run Code Online (Sandbox Code Playgroud)
你会如何在打字稿中声明Layer和Markers类?
我正在尝试发现一种将多个接口组合成一个抽象类的模式.目前我可以通过"implements"组合多个接口,但接口不能声明构造函数.当我必须引入一个构造函数时,我被迫使用一个抽象类.当我使用抽象类时,我必须重新声明整个复合接口!当然我错过了什么?
interface ILayerInfo {
a: string;
}
interface ILayerStatic {
b(): string;
}
class Layer implements ILayerInfo, ILayerStatic {
constructor(info: ILayerInfo);
a: string;
b(): string;
}
Run Code Online (Sandbox Code Playgroud)
答案:使用'new':
interface Layer extends ILayerInfo, ILayerStatic {
new(info: ILayerInfo);
}
// usage: new Layer({ a: "" });
Run Code Online (Sandbox Code Playgroud) 是否可以在不引入与实现完全匹配的签名的情况下定义此专用过载?
on(eventName: string, cb: Function);
on(eventName: "view", cb: (args: {
foo: {
}
}) => void);
on(eventName: string, cb: Function) {
}
Run Code Online (Sandbox Code Playgroud)
当我删除它时,我收到此错误:
专用过载签名不能分配给任何非专业签名.
假设你有一个全局函数alert2:
function alert2(msg) {
window.alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
并且您还可以引用第二个窗口对象:
childWindow = window.open(myUrl);
Run Code Online (Sandbox Code Playgroud)
现在你想在childWindow的上下文中从窗口调用alert2:
alert2.call(childWindow, "does not work without this.window");
Run Code Online (Sandbox Code Playgroud)
对话框出现在主窗口中,因为alert2内部的"窗口"绑定到定义此方法的窗口(父窗口).
一种解决方案是修改alert2:
function alert2(msg) {
this.alert(msg);
}
Run Code Online (Sandbox Code Playgroud)
没有这个修改可以做到这一点吗?像这样的东西:
alert2.call(childWindow.parent, "no such thing as window.parent");
Run Code Online (Sandbox Code Playgroud)
这是一个人为的例子; childWindow.alert("")不是我想要的!
我的源代码可以在jsfiddle上看到和修改,从http://jsfiddle.net/hJ7uw/2/开始
我最近创建了我认为是基于页面的应用程序,它现在被嵌入作为控件使用."控制"需要多次卸载/重新加载.这会导致订阅和未被销毁的dijit控件出现问题.我已经找到了必要的断开连接,注册表.detroy逻辑,但它很乏味.是否有任何最佳实践可以使控件集合可以破坏?
下面的示例代码显示了可以使用基本逻辑完成的任务:http: //pastebin.com/bUUBUMP9
我问的是一个类似于AppDomain的框架是否可以清除在该上下文中创建的任何内容.类似于将控件嵌入IFRAME ......但不是.
以下tsc命令不会创建可用的foo.d.ts:
TSC -declaration -m amd foo.ts
Run Code Online (Sandbox Code Playgroud)
foo.ts:
export enum foo {
bar
}
Run Code Online (Sandbox Code Playgroud)
foo.d.ts:
export declare enum foo {
bar,
}
Run Code Online (Sandbox Code Playgroud)
但
///<reference path="./foo.d.ts"/>
Run Code Online (Sandbox Code Playgroud)
在foo.d.ts中删除"export"之后才能工作.是否有另一种方法在第二个文件中声明foo类型的变量?在我看来引用foo.ts应该有效(它没有):
///<reference path="./foo.ts"/>
Run Code Online (Sandbox Code Playgroud)
我错过了关键字吗?
在Svelte REPL中,可以添加新的 .svelte 文件,但不能添加新的 .js 文件,但现有示例确实有 .js 文件:
https://svelte.dev/examples#衍生商店
最终用户是否可以这样做?
我可以使用 localhost 通过 http 测试 serviceworkers,但我想在移动浏览器上测试。因为它是一个单独的设备,所以我不能使用 localhost,所以我使用了 PC 的名称。所以现在我需要使用 https,这会导致我的 Service Worker 出现 SSL 相关错误:
Uncaught (in promise) DOMException: Failed to register a ServiceWorker for scope (' https://xxx:5500/app/ ') with script (' https://xxx:5500/app/service_worker.js '): An SSL获取脚本时发生证书错误。
我已正确配置 liveServer 以使用自签名证书,并且已成功启用“edge://flags/#unsafely-treat-insecure-origin-as-secure”,但这还不够。
我还担心如何在移动设备上测试 PWA,因为我认为我无法在移动设备上使用“不安全”功能。我认为这是一个常见的情况,但我没有找到任何答案。
如何从esri.dijit中访问i1?
module dijit {
interface i1 {};
}
module esri {
module dijit {
interface i2 {}
interface i3 extends dijit.i2, dijit.i1 {}
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅游乐场示例。
我在以下标记的codepen.io上创建了一个示例:
<div class="outer">
<div class="inner">Inner 1</div>
<div class="inner">Inner 2</div>
<div class="inner">Inner 3</div>
</div>
Run Code Online (Sandbox Code Playgroud)
和css:
.outer {
border: 1pt solid black;
width:320pt;
height: 220pt;
overflow-x: scroll;
overflow-y: hidden;
flex-wrap:nowrap;
}
.inner {
border: 1pt solid blue;
display:inline-block;
width: 200pt;
height: 200pt;
background: silver;
}
Run Code Online (Sandbox Code Playgroud)
但我的目标是创建一种旋转木马,其中外部div的内容不会包裹.这是如何完成的?
typescript ×5
amd ×2
dojo ×2
android ×1
css ×1
html ×1
javascript ×1
openssl ×1
self-signed ×1
svelte ×1