小编Sim*_*mon的帖子

参数中的通用和类型T.

在TypeScript中,我可以将变量的类型定义为类的类型.例如:

class MyClass { ... }

let myVar: typeof MyClass = MyClass;
Run Code Online (Sandbox Code Playgroud)

现在我想将它与泛型类一起使用,如下所示:

class MyManager<T> {
    constructor(cls: typeof T) { ... }
    /* some other methods, which uses instances of T */
}

let test = new MyManager(MyClass); /* <MyClass> should be implied by the parameter */
Run Code Online (Sandbox Code Playgroud)

所以,我想给我的经理类另一个类(它的构造函数),因为管理器需要检索与该类关联的静态信息.

在编译我的代码时,它说它找不到名字'T',我的构造函数在哪里.

知道怎么解决吗?

typescript typescript1.8

9
推荐指数
1
解决办法
7039
查看次数

TypeScript:EventEmitter子类事件的专用签名

我有一个基类EventEmitter,它具有on绑定特定事件处理程序的方法:

class EventEmitter {
    on(event: string, handler: Function) {
        /* add handler internally */
    }

    protected emit(event: string, ...args) {
        /* call all handlers listening on event */
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有各种子类,它们可以使用不同的参数发出不同的事件.我想"声明"该特定类可以发出哪些事件:

class MyClass extends EventEmitter {
    on(event: 'event1', handler: (arg1: number) => void): void;
    on(event: 'event2', handler: (arg1: string, arg2: number) => void): void;
}
Run Code Online (Sandbox Code Playgroud)

所以,我的子类可以发出事件event1event2,但是这似乎并没有被指定正确的方式.TypeScript(tsc 1.8)正在补偿:

error TS2415: Class 'MyClass' incorrectly extends base class 'EventEmitter'.
  Types of property 'on' are incompatible. …
Run Code Online (Sandbox Code Playgroud)

events overloading typescript typescript1.8

8
推荐指数
1
解决办法
1924
查看次数

405 方法不允许,尽管 CORS

我正在尝试使用 Angular 开发前端应用程序。由于我向HTTP POST 和 GET 请求添加了授权标头,因此我收到了405 Method Not Allowed,尽管我似乎允许服务器端的所有内容。

在此处输入图片说明

我的浏览器 Chrome 中的调试器说它要求Access-Control-Request-Method: POSTAccess-Control-Request-Headers: authorization,我的后端允许同时,access-control-allow-methods: GET, POSTaccess-control-allow-headers: authorization,以及access-control-allow-credentials: true

我不明白我在这里缺少什么。服务器是一个 node.js express 服务器,标头设置如下:

res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
res.setHeader('Access-Control-Allow-Credentials', 'true');
res.setHeader('Access-Control-Allow-Headers', 'authorization');
Run Code Online (Sandbox Code Playgroud)

前端代码(Angular 5)如下所示:

this.http.request('post', apiUrl, {
  headers: new HttpHeaders().set('Authorization', 'Bearer abc'),
}).subscribe(response => {
  // some code
});
Run Code Online (Sandbox Code Playgroud)

哪里this.http是角的实例HttpClient

我的前端应用程序是从我的本地主机域“ http://frontend.localhost/app ”提供的,我的后端服务器位于“ http://backend.localhost ”。

我的问题是,我是否缺少一些必须在后端设置的标头?我需要在我的前端应用程序中设置一些选项吗?

http xmlhttprequest http-headers cors angular-httpclient

7
推荐指数
1
解决办法
2万
查看次数

按2键,释放1,再次产生其他键的键控

我在键盘上按S,然后按D,然后释放S.为什么下面的代码在我释放S之后再次触发D的按键事件?有没有办法找出D的第二个下行事件是由另一个键的关键引起的?

function handler(event) {
  if (!event.repeat) console.log(event.code, event.type);
}

window.addEventListener('keydown', handler);
window.addEventListener('keyup', handler);
Run Code Online (Sandbox Code Playgroud)

输出:

KeyS keydown - S pressed
KeyD keydown - D pressed
KeyS keyup   - S released
KeyD keydown - WHY???
Run Code Online (Sandbox Code Playgroud)

奇怪的keydown事件只发生在Chrome中(我在Linux Mint上使用的是Chromium 66.0.3359.139),这在Firefox中不会发生.

这可能是一个错误,还是预期的行为?

javascript dom-events

6
推荐指数
0
解决办法
73
查看次数

tsd:安装本地定义文件

我有一个用TypeScript编写的本地节点包,我想在实际项目中使用它.使用npm,我可以像这样安装本地包:

$ npm install --save /path/to/package
Run Code Online (Sandbox Code Playgroud)

要么:

$ npm install --save /path/to/package.tar.gz
Run Code Online (Sandbox Code Playgroud)

这将在node_modules目录中安装所需的.js文件.在该包中还有一个生成的.d.ts文件,我想将其安装到我的项目中(在typings/tsd.d.ts中自动链接它).但使用以下命令无效:

$ tsd install /path/to/package/package.d.ts --save
Run Code Online (Sandbox Code Playgroud)

它说>> zero results.那么,在不需要存储库的情况下安装本地定义文件的方法是什么?

更新:

我可以简单地将我的d.ts文件复制到typings目录和我的文本编辑器(对我来说,它是使用TypeScript插件的Sublime Text),它能够找到声明.目录布局是这样的:

/my-project/
  /typings/
    tsd.d.ts - auto-generated by `tsd install`
    node/ - I've installed the node definitions
    my-package.d.ts - copied or symlinked file
  my-project.ts - I'm working here
Run Code Online (Sandbox Code Playgroud)

但是,在module.exports(exports = function...在TypeScript中)导出唯一的函数时,我遇到了一个问题.在这种情况下,导出的函数有点'匿名',甚至在d.ts文件中都没有命名,因此我需要手动编辑它.

我的测试用例:

'my-package'提供了一个函数,通常导入为'myPackage':

export = function myPackage(a: string, b: string) { return a + ' ' + b; };
Run Code Online (Sandbox Code Playgroud)

declarationtrue在tsconfig.json中设置为,所以该 …

typescript definitelytyped tsd

5
推荐指数
2
解决办法
1万
查看次数