【问题标题】:Probem with the Tuple type元组类型的问题
【发布时间】:2019-03-10 18:18:44
【问题描述】:

最近我尝试遵循 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'.

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

【问题讨论】:

    标签: javascript arrays typescript tuples


    【解决方案1】:

    属性“长度”的类型不兼容。
    类型“2”不能分配给类型“1”。

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

    声明一个只有一个元组的数组类型。如果您尝试使用一个元素以外的任何元素对其进行初始化,则会出错。

    您需要更改您的responses 声明

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

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

    【讨论】:

    • 我已经尝试过这个解决方案,即使有了这个澄清,问题仍然存在。它与“数组”的大小有关,因为响应中有 2 个项目。
    • 尝试添加 let responses: Array&lt;[string, () =&gt; void]&gt;[string, () =&gt; void][] 作为您的数组类型。您当前的类型声明意味着一个数组,其中只有一个 tuple
    • ReportMessage函数没有问题,但是变量的声明。
    • 我上面的评论只针对您的responses 声明,而不是您的ReportMessage 函数。
    • @ethane 答案是正确的,如果将类型更改为 "[string, (string) => void][]" 代码编译良好​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2010-12-24
    • 2021-12-02
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多