javascript - 元组类型的问题

标签 javascript arrays typescript tuples

最近我尝试遵循 Adam Freeman 的 ProAngular,但遇到了一个在其他地方找不到的问题。我有一个代码:

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;
    }

这是负责消息的类的构造函数。

export class Message{
constructor(private text:string, private error:boolean = false,
                private responses?:[[string, (string) => void]]){

}

}

一切似乎都正常,但我收到错误:

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'.

很奇怪,我的代码和书上的一样。我知道这是一件小事,但我真的不知道如何解决这个问题。有人可以帮忙吗?

最佳答案

Types of property 'length' are incompatible.
Type '2' is not assignable to type '1'.

let responses:[[string, (string) => void]]

声明一个只有一个元组的数组类型。如果您尝试使用除一个元素之外的任何元素来初始化它,将会出错。

您需要更改您的响应声明:

let responses: [string, (string) => void][]

let responses: Array<[string, (string) => void]>

关于javascript - 元组类型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55090871/

相关文章:

php - 调用函数并运行它

angular - 无法读取 SafeSubscriber._next 未定义的属性 'push'

javascript - 如何使用mockDOMSource来测试Cycle.js中的操作流?

jquery - 如何初始化 jquery 输入类中的数组?

javascript - 转换数组

reactjs - 如何正确使用 Typescript 中的 React.lazy() 导入带有泛型类型参数的 React 组件?

javascript - 我无法使用javascript从android ajax获取responseText的数据

javascript - 使用 AJAX 和 PHP 将数据插入 MySQL

javascript - 如何使用 JavaScript 获取没有 id 的输入值?

java - 为数组实现撤销和重做