流星 1.10.2 打字稿 ValidatedMethod - this.userId
meteor 1.10.2 typescript ValidatedMethod - this.userId
我正在与 meteor typescript 和 mdg:ValidatedMethod
作斗争。
我将 This Repo 中的 @types 用于 mdg:ValidatedMethod
。
让我们假设这个没有 ValidateMethod 的流星代码:
const addLink = Meteor.methods({
'links.add'({ title,url }) {
new SimpleSchema({
title: { type: String },
url: {type: String}
}).validate({ title,url });
if (!this.userId) {
//throw an error!
}
LinksCollection.insert({
title,
url,
createdAt: new Date(),
});
}
});
这里一切正常,在 if (this.userId) {
上没有错误
但是,当我现在更改为 ValidatedMethod 时,typescript 找不到 this.userId
const addLink = new ValidatedMethod({
name: 'links.add',
validate: new SimpleSchema({
title: { type: String },
url: {type: String}
}).validator(),
run({title,url}) {
if (!this.userId) { //Here typescript can't find this.userId
//throw an error!
}
LinksCollection.insert({
title,
url,
createdAt: new Date(),
});
}
});
我检查了第一个示例中的类型,并在@type-definition 中添加了 this
-ref 运行 方法,这意味着我将第 17 行从
更改为
run: (args: { [key: string]: any; }) => void;
至
run: (this: Meteor.MethodThisType, args: { [key: string]: any; }) => void;
我现在似乎在工作,但是由于我对打字稿世界还很陌生,我想知道,这是否是正确的做法?!
TypeScript 让您可以像这样定义 this
的类型:
function f(this: ThisType) {}
查看此处了解更多信息:https://www.typescriptlang.org/docs/handbook/functions.html
在这种特定情况下,您可以添加
this: Meteor.MethodThisType
到 index.d.ts 中的 run
方法签名:
run: (this: Meteor.MethodThisType, args: { [key: string]: any; }) => void;
它并不完全完整,因为 ValidatedMethod 定义了几个额外的参数(例如 this.name
),但您可以根据需要添加它们。
我正在与 meteor typescript 和 mdg:ValidatedMethod
作斗争。
我将 This Repo 中的 @types 用于 mdg:ValidatedMethod
。
让我们假设这个没有 ValidateMethod 的流星代码:
const addLink = Meteor.methods({
'links.add'({ title,url }) {
new SimpleSchema({
title: { type: String },
url: {type: String}
}).validate({ title,url });
if (!this.userId) {
//throw an error!
}
LinksCollection.insert({
title,
url,
createdAt: new Date(),
});
}
});
这里一切正常,在 if (this.userId) {
但是,当我现在更改为 ValidatedMethod 时,typescript 找不到 this.userId
const addLink = new ValidatedMethod({
name: 'links.add',
validate: new SimpleSchema({
title: { type: String },
url: {type: String}
}).validator(),
run({title,url}) {
if (!this.userId) { //Here typescript can't find this.userId
//throw an error!
}
LinksCollection.insert({
title,
url,
createdAt: new Date(),
});
}
});
我检查了第一个示例中的类型,并在@type-definition 中添加了 this
-ref 运行 方法,这意味着我将第 17 行从
run: (args: { [key: string]: any; }) => void;
至
run: (this: Meteor.MethodThisType, args: { [key: string]: any; }) => void;
我现在似乎在工作,但是由于我对打字稿世界还很陌生,我想知道,这是否是正确的做法?!
TypeScript 让您可以像这样定义 this
的类型:
function f(this: ThisType) {}
查看此处了解更多信息:https://www.typescriptlang.org/docs/handbook/functions.html
在这种特定情况下,您可以添加
this: Meteor.MethodThisType
到 index.d.ts 中的 run
方法签名:
run: (this: Meteor.MethodThisType, args: { [key: string]: any; }) => void;
它并不完全完整,因为 ValidatedMethod 定义了几个额外的参数(例如 this.name
),但您可以根据需要添加它们。