Javascript Node.js Typescript如何将Request.payload分配给自定义接口

Javascript Node.js Typescript如何将Request.payload分配给自定义接口,javascript,node.js,typescript,hapijs,Javascript,Node.js,Typescript,Hapijs,我在hapi.js框架中有一个node.js API。我想为用户输入负载创建接口。例如: 路线定义: { path: "/sample", method: "POST", handler: myHandler, options: { validate: { payload: { number1: joi.number().required(), string1:

我在hapi.js框架中有一个node.js API。我想为用户输入负载创建接口。例如:

路线定义:

{
    path: "/sample",
    method: "POST",
    handler: myHandler,
    options: {
        validate: {
            payload: {
                number1: joi.number().required(),
                string1: joi.string().required(),
                number2: joi.number(),
            }
        }
    }
}
处理程序:

interface SampleInput {
    number1: number;
    string1: string;
    number2?: number;
}

const myHandler = async (request, h): Promise<string> => {
    const input: SampleInput = request.payload;

    // any works but really want to get rid of this
    const _input: any = request.payload;
    const input: SampleInput = _input;

    // Service body

    return "Hello World";
}
接口采样输入{
编号1:编号;
string1:string;
数字2?:数字;
}
constmyhandler=async(请求,h):Promise=>{
常量输入:SampleInput=request.payload;
//任何工作,但真的想摆脱这个
常量输入:any=request.payload;
常量输入:SampleInput=\u输入;
//服务机构
返回“你好世界”;
}
此代码总是显示一些错误,如
Request.payload不能分配给Sample
Request.payload
的类型是
string | object | Buffer | internal.Readable
。我尝试使用类型guard
constinput:SampleInput=(request.payload)但是仍然得到类似于
{}的东西,它不可分配给Sample

如何定义类型并将有效负载直接分配给它?

类型断言不起作用,因为
SampleInput
不仅仅是一些随机对象,而且
object
基本上指定了一个对象,即没有特定键的非基本类型(请参阅)
SampleInput
对象的超集
SampleInput
可以分配给
对象
变量,但反之亦然

考虑到已知的
有效负载
SampleInput
,因为它是在运行时验证的,所以它应该是:

const input = <SampleInput>request.payload;
const input=request.payload;
因为
request.payload
是string |对象| Buffer | internal.Readable,所以它可以被断言为SampleInput(可能需要像
request.payload
那样的黑客操作)。

类型断言不起作用,因为
SampleInput
不仅仅是一些随机对象,而
object
基本上指定了一个对象,即没有特定键的非基本类型(请参阅)
SampleInput
对象的超集
SampleInput
可以分配给
对象
变量,但反之亦然

考虑到已知的
有效负载
SampleInput
,因为它是在运行时验证的,所以它应该是:

const input = <SampleInput>request.payload;
const input=request.payload;

由于
request.payload
是string |object| Buffer | internal.Readable,因此它可以被断言为SampleInput(可能需要像
request.payload
那样的hack)。

嗨,语法是否等同于
request.payload as SampleInput
as
是较新的语法,通常更推荐,因为它不需要调整就可以与JSX兼容。您好,该语法是否等同于
request.payload as SampleInput
?@ErnestJones是的,
as
是较新的语法,通常更推荐,因为它不需要调整就可以与JSX兼容。