不知道为什么,但是为什么我必须在这个函数中使用this
参数:
export class UsersModel extends Model {
getUser(this: UsersModel, name: string) {
return this.where('first', '_ilike', `${name}%`).order('last', 'asc');
}
}
如果我不使用它,我会得到一个错误:
类型为“${string}%
”的参数不能赋值给类型为“this[“fields”][“first”] extends Model?Fields〈this[“fields”][“first”]〉“的参数:此[“字段”][“第一个”]“。
Playground
1条答案
按热度按时间7cwmlq891#
使用任意
this
(扩展UsersModel
),TypeScript无法推断Fields<this>[K]
的具体类型。它可能是string
,但也可能更具体。请考虑这里是否允许调用
getUser
?不允许,因为where
方法的类型将被限制为where<"first">(field: "first", key: "_ilike", value: "other"): this
,并且"…%"
(或通常为string
)不能赋值给"other"
。因此,您需要告诉TypeScript,您希望仅在
fields.first
类型恰好为string
的UsersModel
示例上调用getUser
。(诚然,在声明getUser(this: UsersModel, …)
之后,TypeScript无法调用bum.getUser("…")
,它忘记了字段类型可以用在逆变位置中,并且只检查x1M16N1x可以被分配给x1M17N1x)。