我有一个这样的class
:
export default class UserDto {
email: string;
permissions: string[];
roles: string[];
}
和定义toUser
的d.ts
文件:
declare global {
class UserDto {
toUser(): User;
}
}
和常规ts
文件中的函数声明:
import User from "types/User";
import Activity from "types/Activity";
import Role from "types/Role";
import UserDto from "types/UserDto";
UserDto.prototype.toUser() = function (): User {
return {
email: this.email,
permissions: new Set(this.permissions.map((p) => Activity[p])),
roles: new Set(this.roles.map((r) => Role[r])),
};
};
我的问题是,当我尝试使用这个扩展不工作(和VS Code不承认它):
import Role from "types/Role";
import User from "types/User";
import UserDto from "types/UserDto";
import Activity from "types/Activity";
import toUser from "extensions/UserDtoExtensions";
import users from "data/users.json";
import roles from "data/roles.json";
export default function findUser(email: string): User {
const userDto: UserDto = users[email];
if (userDto) {
return userDto.toUser();
} else {
return {
email: "anon@anon.com",
permissions: new Set(
roles.Anonymous.permissions.map((p) => Activity[p])
),
roles: new Set([Role.Anonymous]),
};
}
}
我
TypeError: userDto。tuser不是一个函数
我做错了什么?
同样有趣的是,在我增加prototype
VS Code的文件中也写着
赋值表达式的左边必须是变量或属性访问。
为什么?
- 在文档中:
默认导出也不能增强
-
declare module "types/UserDto"
,而不是declare global
。 -
import "extensions/UserDtoExtensions"
,不含toUser from
。
我认为这些应该是所有需要的更改。