web-dev-qa-db-ja.com

タイプ 'X'の引数は、タイプ 'X'のパラメーターに割り当てることができません

良い一日。 VSCodeを使用して、Type Scriptを初めて使用します。

次のエラーの取得:

  1. エラーTS2322:タイプ '()=> string'はタイプ 'string'に割り当てられません。

  2. エラーTS2322:タイプ '()=>番号'は、タイプ '番号'に割り当てることができません。

コード:

DTO.ts

interface DTO {

    getId(): number;
    getValue(): string;
}
export = DTO;

LinkedObject.ts

class LinkedObject {

    public value: string = "Not Set";
    public id: number = 0;

    constructor(value?: string, id?: number) {
        this.value = value;
        this.id = id;
    }
}
export = LinkedObject;

上記のインターフェイスメソッドを使用してLinkedObjectクラスをインスタンス化しようとしています。

TravelClientFormPopulator.ts

class TravelClientFormPopulator {

    public populateComboBoxUsingDTOs(dataObjects: Array<DTO>, comboBoxID: string): void {

        // Get the combo box
        var selectElement = <HTMLSelectElement> document.getElementById(comboBoxID);
        // Reset the options 
        selectElement.options.length = 0;

        var linkedObjectsToAdd: LinkedObject[] = new Array<LinkedObject>();

        var defaultLinkedObject: LinkedObject = new LinkedObject("Not Selected", 0);

        linkedObjectsToAdd.Push(defaultLinkedObject);

        for (var i = 0; i < dataObjects.length; i++) {
            var value: string = dataObjects[i].getValue; // Error here
            var id: number = dataObjects[i].getId; // And here
            var linkedObject: LinkedObject = new LinkedObject(value, id);
        }
    }
}

どんな助けも大歓迎です。

49
Sasha

括弧が抜けています:

var value: string = dataObjects[i].getValue(); 
var id: number = dataObjects[i].getId();
41
Martin Vseticka

VSCodeのみでこの問題が発生した場合は、VSCodeを再起動するだけで修正できます。時々、Intellisenseはインポートまたはタイプを台無しにするようです。

TypeScriptに関連:型 'RegExpMatchArray'の引数は、型 'string'のパラメーターに割り当てられません

5
MaximeBernard

変数タイプanyを使用し、これらのタイプの問題を削除するだけです。

エラーコード :

  let accessToken = res;
  localStorage.setItem(LocalStorageConstants.TOKEN_KEY, accessToken);

与えられたエラータイプ '{}'の引数は、タイプ 'string'のパラメーターに割り当てられません。

成功コード:

  var accessToken:any = res;
  localStorage.setItem(LocalStorageConstants.TOKEN_KEY, accessToken);

var type変数を作成してから、変数type anyを使用して、この問題を解決します。

any =エラーを削除するために、あらゆるタイプの値を処理します。

これらのエラーが表示される可能性がある他のシナリオも追加

  1. 最初にコンパイラバージョンを確認し、最新のTypeScriptコンパイラをダウンロードしてES6構文をサポートします

  2. TypeScriptは、入力エラーがあっても出力を生成しますが、実際には開発を妨げません。

これらのエラーが表示された場合、初期化で構文を確認するか、これらのメソッドまたは変数を呼び出すと、
関数のパラメーターのデータ型が間違っているかどうかを確認します。「string」として初期化し、「boolean」または「number」を割り当てます

例えば

1。

 private errors: string;
    //somewhere in code you assign a boolean value to (string)'errors'
    this.errors=true
    or 
    this.error=5

2。

 private values: Array<number>;    
    this.values.Push(value);  //Argument of type 'X' is not assignable to parameter of type 'X'

ここでのエラーメッセージは、配列の初期化用の角かっこがないためです。それがなくても動作しますが、VS Codeの赤色の警告が表示されます。

private values: Array<number> = [];    
this.values.Push(value);

注:
Javascriptは割り当てられた値に従って型キャストすることを忘れないでください。したがって、TypeScriptはそれらに通知しますが、VS Codeでこれらのエラーが強調表示されていてもコードは実行されます。

例:

 var a=2;
 typeof(a) // "number"
 var a='Ignatius';
 typeof(a) // "string"
3
Ignatius Andrew

私はangular 2とTypeScriptをやっていますが、矢印表記にスペースがあることに気づきませんでした

.map(key = >の代わりに.map(key =>がありました

間違いなく、愚かな構文エラーに目を開かせてください

2
Mike Kellogg

私の場合、Itemというカスタムインターフェイスがありましたが、オートコンプリートangular Itemクラスのために誤ってインポートしました。適切なパッケージからインポートしていることを確認してください。

1

この問題は、基本的に、コンパイラーが文字列型のキャスト演算子と数値の違いを理解できない場合に発生します。

Number(<<<< ... Variable_Name ...... >>>>)を使用して、Numberオブジェクトを使用し、値を渡して適切な結果を取得できます。

0
Sachin Mishra

私の場合、奇妙なことに、不平を言っていたクラスのインポートが欠落しており、IDEはそれを検出しませんでした。

0
artemisian