Javascript 元组类型的Probem
最近,我试着跟随亚当·弗里曼(Adam Freeman)的前角理论,我遇到了一个在别处找不到的问题。我有一个密码:Javascript 元组类型的Probem,javascript,arrays,typescript,tuples,Javascript,Arrays,Typescript,Tuples,最近,我试着跟随亚当·弗里曼(Adam Freeman)的前角理论,我遇到了一个在别处找不到的问题。我有一个密码: canActivate(route:ActivatedRouteSnapshot,state:RouterStateSnapshot) :Promise<boolean>|boolean{ if (route.params['mode']=='create') { return new Promise<boolean>((resolv
canActivate(route:ActivatedRouteSnapshot,state:RouterStateSnapshot)
:Promise<boolean>|boolean{
if (route.params['mode']=='create') {
return new Promise<boolean>((resolve, reject) => {
let responses:[[string, (string) => void]] = [
['Tak', () => {resolve(true)}],
['Nie', () => {
this.router.navigateByUrl(this.router.url);
resolve(false);
}]
];
this.messages.reportMessage(new Message('Akceptujesz warunki?', false, responses));
});
}
else{
return true;
}
}
看起来一切正常,但我收到一个错误:
error TS2322: Type '[[string, () => void], [string, () => void]]' is not assignable to type '[[string, (string: any) => void]]'.
Types of property 'length' are incompatible.
Type '2' is not assignable to type '1'.
这很奇怪,因为我的代码和书中的代码一样。我知道这是件小事,但我真的不知道该怎么弄清楚。有人能帮忙吗
属性“length”的类型不兼容。类型“2”不可分配给类型“1” 声明正好一个元组的数组类型。如果您尝试使用除一个元素以外的任何其他元素初始化它,它将出错 您需要将您的
回复声明更改为:
let responses: [string, (string) => void][]
或
let响应:数组无效]>
我已经尝试过这个解决方案,即使有了这个澄清,问题仍然存在。它与“数组”的大小有关,因为响应中有两项。请尝试添加让响应:数组无效]>
或[string,()=>void][]
作为数组类型。您当前的类型声明意味着数组只有一个tuple
ReportMessage函数没有问题,但是变量的声明有问题。我上面的评论只针对响应声明,而不是ReportMessage
函数。@ethane如果将类型更改为“[string,(string)=>void][]”代码编译得很好
let responses:[[string, (string) => void]]
let responses: [string, (string) => void][]
let responses: Array<[string, (string) => void]>