现在我有一个非常通用的功能,当我的客户端与我的服务器对话时,它就会命中。因此,为了保持灵活性,我这样做:
public call(method: string, ...parameters: any[]) {}
Run Code Online (Sandbox Code Playgroud)
不过,在我的服务器上,我将所有方法保存在一起,如下所示:
MethodManager.methods({
findOne: {
function: function(collection: string, query: Object) {
return model(collection).findOne(query).exec();
}
},
find: {
function: function(collection: string, query: Object, sortQuery: Object = {}) {
return model(collection).find(query).sort(sortQuery).exec();
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,每个方法可能有不同的参数。当我在客户端编写代码时,我无法充分利用 Typescript 的潜力,因为它是“任意”类型的。
我怎样才能做到这一点,以便 Visual Studio 代码在我编写这行代码时能够识别:
this.socketManager.call('findOne',
Run Code Online (Sandbox Code Playgroud)
它会弹出一个帮助列表,如下所示:
(method: 'findOne', collection: string, query: Object)
Run Code Online (Sandbox Code Playgroud)
但是当我输入:
this.socketManager.call('find',
Run Code Online (Sandbox Code Playgroud)
它给了我:
(method: 'find', collection: string, query: Object, sortQuery: Object = {})
Run Code Online (Sandbox Code Playgroud)
而不是无益的:
(method: string, ...parameters: any[])
Run Code Online (Sandbox Code Playgroud)
这可能吗?这对发展将是一个巨大的帮助。
为什么打字稿 ES6 没有检测到对象不是函数?
find: (collection: string, query: object, sortQuery = {}, cb?: Function) => {
socketManager.call('find', collection, query, sortQuery, cb);
}
Run Code Online (Sandbox Code Playgroud)
基于这个函数,你会假设这会失败:
this._services._socket.methods.find('vendors', {type: 'repair'}, (errVen, resVen) => {}
Run Code Online (Sandbox Code Playgroud)
由于没有 sortQuery 对象,而是一个回调函数。这没有给我任何类型的错误,这意味着打字稿允许将回调作为对象类型。
我如何确保这会导致错误?
给出汇总后展开的以下数据:
let workOrders = [
{customer: 'A', job: 'Apple', chemical: {name: 'Chem A', quantity: 500}},
{customer: 'A', job: 'Banana', chemical: {name: 'Chem B', quantity: 400}},
{customer: 'A', job: 'Banana', chemical: {name: 'Chem C', quantity: 300}},
{customer: 'B', job: 'Cherry', chemical: {name: 'Chem A', quantity: 200}}
]
Run Code Online (Sandbox Code Playgroud)
所需输出:
[
{
customer: 'A',
jobs: [
{
job: 'Apple',
chemicals: [
{name: 'Chem A', quantity: 500}
]
},
{
job: 'Banana',
chemicals: [
{name: 'Chem B', quantity: 400},
{name: 'Chem C', quantity: 300} …
Run Code Online (Sandbox Code Playgroud)