【发布时间】:2021-07-20 22:48:35
【问题描述】:
我试图让强制类型转换在打字稿中工作。我记得过去我做了类似下面的例子,但它似乎不起作用,我不确定它是因为打字稿的版本还是什么等等。在下面的例子中,我如何强制对下面的例子进行类型转换:
class UserDto {
name: string;
email: string;
id: () => number; // before this used to work
}
let req = {
name: 'John Doe',
email: 'email@email.com',
id: '10',
};
let res: UserDto = req;
console.log(res);
错误:
Type 'string' is not assignable to type '() => number'.
------------------ 更新 - 让目标更清晰一点-------------
假设我有一个这样的发布请求:
{
"userId": "10",
"name": "John",
"address": {
"line1": "some road"
}
}
DTO 看起来像这样:
(interface | class) AddressDTO {
line1: string;
}
(interface | class) UserDTO {
userId: number;
name: string;
address: AddressDTO;
}
然后当我们拦截请求并将数据传递到系统的另一部分时,我们会执行类似的操作。 (这是我之前肯定做过的工作,但找不到来源,因为我花了很长时间才让它工作。我虽然是 'id: "() =>" number' 部分强制转换为数字)
想要的结果:
let req = {
"userId": "10",
"name": "John",
"address": {
"line1": "some road"
}
};
let postData: UserDTO = req;
// output is as follow:
{
"userId": 10, // here it's force cast to number
"name": "John",
"address": AddressDTO (set to: "line1": "some road")
};
【问题讨论】:
-
您在寻找
let res = req as unknown as UserDto;吗? -
我尝试了两种变体。我得到同样的错误
-
为什么要把id做成字符串,而在类里却是函数呢?
-
没有我试图创建一个 DTO,我只是分配 let dto =
request.params;。或类似的东西。但我遇到的问题是,当 url 参数被发送时,它抱怨我不能将 id 设置为数字,因为参数是一个字符串。我将它作为 () => number 的唯一原因是这是我让它强制将字符串 id 强制类型转换为过去的数字的唯一方法。据我所知,它是我使用的一个“类”,但它可能是一个接口等我真的不知道。
标签: typescript types casting