我正在我的应用程序中使用express和passport,在这两个包中,界面下都有一个user属性Request。目前,在请求对象中express具有一个user属性,但没有附加其他属性,例如req.user。我正在尝试对express进行声明合并(不太确定这是否是正确的术语),以便告诉打字稿附加了Express.Request.user一个id属性,如下所示:
declare namespace Express {
export interface Request {
user: {
id: string
}
}
}
Run Code Online (Sandbox Code Playgroud)
同时也passport有一个user属性,但值为Express.User。当我执行上面的声明合并时,我收到一条错误,提示“All declarations of 'user' must have identical modifiers.这是 的声明文件” passport。
interface User {}
interface Request {
authInfo?: AuthInfo;
user?: User;
// These declarations are merged into express's Request type
login(user: User, done: (err: any) => void): void; …Run Code Online (Sandbox Code Playgroud) 我有一个执行一些数据库操作的函数。该实现被包装在一个try/catch块中。例如
async function update({id, ...changes}): Promise<IUserResult> {
try {
//code implementation here
return updatedUser
} catch(error) {
console.error
}
}
Run Code Online (Sandbox Code Playgroud)
打字稿编译器总是抛出一个错误,我返回未定义。我知道是这样,因为我没有从函数块本身显式返回任何值,而是从try/catch块中显式返回任何值。我该怎么办?我刚刚学习打字稿,我想知道如何获取返回值以匹配函数返回类型,在本例中为IUserResult.
非常感谢。
我有一个像这样的对象数组,
const arr = [
{
'first name': 'john',
'last name': 'doe',
age: '22',
'matriculation number': '12349',
dob: '12/08/1997'
},
{
'first name': 'Jane',
'last name': 'Doe',
age: '21',
'matriculation number': '12345',
dob: '31/08/1999'
},
{
'first name': '',
'last name': undefined,
age: undefined,
'matriculation number': undefined,
dob: undefined
}
]
Run Code Online (Sandbox Code Playgroud)
我想从数组中删除最后一个对象,因为它具有虚假值,我试图通过编写一个像这样的简单函数来实现这一点
function removeFalsy(obj) {
for (let i in obj) {
if (!obj[i]) {
delete obj[i]
}
}
return obj
}
Run Code Online (Sandbox Code Playgroud)
那没有解决问题,我也尝试使用
arr.map((a) => Object.keys(a).filter((b) => Boolean(b)))
Run Code Online (Sandbox Code Playgroud)
但这只是返回了对象中的键,请问我该如何实现?
谢谢