AWS SDK JS v3中CognitoIdentityClient构造器语法及调用问题
关于CognitoIdentityClient构造器语法的解析与调用问题
一、构造器中...[configuration]的含义
这是TypeScript里剩余参数与数组解构结合的写法,拆解来看:
...是剩余参数运算符,会把构造器接收到的所有参数打包成一个数组;[configuration]是数组解构,从这个打包后的数组里取出第一个元素,赋值给configuration变量。
这种写法的核心作用是限制构造器只能接受0个或1个参数:
- 不传参数时,剩余参数数组为空,
configuration会是undefined,满足配置可选的设计; - 传1个参数时,该参数会被解构赋值给
configuration; - 传2个及以上参数时,TypeScript会直接抛出类型错误,因为
__CheckOptionalClientConfig<CognitoIdentityClientConfig>类型会约束参数数量。
注意:这只是TypeScript类型层面的语法,实际运行时构造器并不接受数组参数,它的参数是可选的单个配置对象。
二、调用异常的原因
你用new CognitoIdentityClient([myConfiguration])调用时,相当于把一个数组作为唯一参数传给了构造器。但构造器期望的是直接传入CognitoIdentityClientConfig类型的对象(或者不传),而非包含该对象的数组,这就导致内部无法正确解析配置,进而抛出异常。
三、正确的调用方式
直接传入配置对象(或不传)即可:
// 方式1:传入配置对象 const client = new CognitoIdentityClient(myConfiguration); // 方式2:不传参数(使用默认配置) const client = new CognitoIdentityClient();
四、模拟该语法的测试代码示例
如果要自己模拟这个语法,正确的TypeScript代码示例如下:
// 模拟配置类型约束 type OptionalConfig = { region?: string } | undefined; class TestClient { constructor(...[config]: [OptionalConfig]) { console.log(config); } } // 正确调用 new TestClient({ region: 'us-east-1' }); // 输出 { region: 'us-east-1' } new TestClient(); // 输出 undefined // 错误调用(TypeScript会报错,运行时也不符合预期) // new TestClient([{ region: 'us-east-1' }]); // 传入数组而非配置对象
内容的提问来源于stack exchange,提问作者briston82
相关产品推荐
相关产品推荐

