angular - Bağlama elemanı 'index' gizli olarak 'any' türüne sahiptir


Angular2-mdl'in demo projesini bir rehber olarak kullanarak tab bileşenini taşıdım ve bunu şu şekilde uygulamaya çalıştım:

    import { Component } from '@angular/core';
    
    @Component({
        selector: 'my-dashboard',
        templateUrl: './landing.my.html'
    })
    export class MyDashboard {
        public activeIndex = 0;
    
        public tabChanged({index}): void {
            this.activeIndex = index;
        }
    
    }

ve şablon:

    <mdl-tabs mdl-ripple mdl-tab-active-index="0" (mdl-tab-active-changed)="tabChanged($event)">
        <mdl-tab-panel mdl-tab-panel-title="home">
            <mdl-tab-panel-title>
                <mdl-icon class="mdl-color-text--primary">home</mdl-icon><span>Home</span>
            </mdl-tab-panel-title>
            <mdl-tab-panel-content>
                <ul>
                    <li>Stanis</li>
                    <li>Joffrey</li>
                </ul>
            </mdl-tab-panel-content>
        </mdl-tab-panel>
        <mdl-tab-panel mdl-tab-panel-title="something">
            <mdl-tab-panel-title>
                <mdl-icon class="mdl-color-text--primary">group_work</mdl-icon><span>Ontology</span>
            </mdl-tab-panel-title>
            <mdl-tab-panel-content>
                <ul>
                    <li>Stanis</li>
                    <li>Joffrey</li>
                </ul>
            </mdl-tab-panel-content>
        </mdl-tab-panel>
        <mdl-tab-panel mdl-tab-panel-title="another">
            <mdl-tab-panel-title>
                <mdl-icon class="mdl-color-text--primary">list</mdl-icon><span>Cognitive</span>
            </mdl-tab-panel-title>
            <mdl-tab-panel-content>
                <ul>
                    <li>Robert</li>
                </ul>
            </mdl-tab-panel-content>
        </mdl-tab-panel>
        <mdl-tab-panel mdl-tab-panel-title="else">
            <mdl-tab-panel-title>
                <mdl-icon class="mdl-color-text--primary">call_split</mdl-icon><span>Cognition</span>
            </mdl-tab-panel-title>
            <mdl-tab-panel-content>
                <ul>
                    <li>Robert</li>
                    <li>Renly</li>
                </ul>
            </mdl-tab-panel-content>
        </mdl-tab-panel>
        <mdl-tab-panel mdl-tab-panel-title="last">
            <mdl-tab-panel-title>
                <mdl-icon class="mdl-color-text--primary">backup</mdl-icon><span>Streaming</span>
            </mdl-tab-panel-title>
            <mdl-tab-panel-content>
                <ul>
                    <li>Joffrey</li>
                    <li>Myrcella</li>
                    <li>Tommen</li>
                </ul>
            </mdl-tab-panel-content>
        </mdl-tab-panel>
    </mdl-tabs>

Webpack kullanıyorum ve aşağıdaki TypeScript hatasını örtük any türleri ile ilgili alıyorum:

ERROR in [default] home/my-app-ui/src/app/landing.my.ts:10:23 
Binding element 'index' implicitly has an 'any' type.

Ancak uygulama istenen işlevselliği gösteriyor, bunu nasıl düzelteceğimi biri açıklayabilir mi?

Cevap #1

Bir nesne için, türü şu şekilde bildirmeniz gerekir:

{index} : {index:any}

Daha fazla özelliğe sahip nesneler için:

{a,b} : {a:any, b:any}

Cevap #2

bir nesne için, bir özellik ile bu şekilde deklarasyon yapmanız gerekir:

{propA} : {propA:any}

birden fazla özelliğe sahip:

{propA, propB} : {propA:any, propB:any}

Cevap #3

Bu, tür script derleyicisinin bir kontrolüdür. Kontrolü ya kaldırabilir ya da bildiride açıkça any türünü belirtebilirsiniz (@Thyagu'dan cevap). tsconfig.json dosyasında, satırı değiştirebilirsiniz

"noImplicitAny": false,

için

"noImplicitAny": true,

Cevap #4

Değişken için any veya sayı, string gibi belirli bir tür kullanın

public tabChanged(index:any): void {
    this.activeIndex = index;
}

İlgili makaleler