Ошибка TypeScript

-1

Я получаю эту ужасную ошибку, когда запускаю этот машинописный текст... В нем говорится, что я передаю неправильный "тип" аргумента... Это мой первый раз с использованием машинописного текста, любая помощь будет оценена.

Вот ошибка:

Could not apply type 'number' to argument 1 which is of type 'HTMLElement'.

И вот мой TS-код:

class Offer {
    quantity: number;
    price: number;
    client: string;

    constructor (quantity: number, price: number, client: string) {
        this.quantity = quantity;
        this.price = price;
        this.client = name;
    }

    getSelectedItem() {
        var option = $('#ddown :selected').text();
    }


}

class Bid {
    quantity: number;
    price: number;
    client: string;

    constructor (quantity: number, price: number, client: string) {
        this.quantity = quantity;
        this.price = price;
        this.client = name;
    }

    getSelectedItem() {
        var option = $('#ddown :selected').text();
    }


}

function getBid() {
    var x = document.getElementById("quantity");
    var y = document.getElementById("price");
    console.log(y);
    var n = document.getElementById("name");

    return new Bid(x, y, n);

    // $("<tr><td>" + n.value + "</td><td>" + x.value + "X$" + y.value + "</td></tr>").appendTo("#table");
}

function getOffer() {
    var x = document.getElementById("quantity");
    var y = document.getElementById("price");
    console.log(y);
    var n = document.getElementById("name");

    return new Offer(x, y, n);

    // $("<tr><td>" + n.value + "</td><td></td><td>" + x.value + "X$" + y.value + "</td></tr>").appendTo("#table");


}

function append_bid(bid) {
    alert("efff you");
    $("<tr><td>" + bid.client + "</td><td>" + bid.quantity + "X$" + bid.price+ "</td></tr>").appendTo("#table");
}

function append_offer(offer) {
    $("<tr><td>" + offer.client + "</td><td></td><td>" + offer.quantity + "X$" + offer.price + "</td></tr>").appendTo("#table");
}

var bids = [];
var offers = [];

$(document).ready(function(){
    $("#submit").click(function(){
        var msg = $("#ddown option:selected").text();

        if (msg == 'Bid'){
                bids.push(getBid());
                alert(bids.peek);
                append_bid(bids.peek);
                console.log('here');
                return false;
            } else {
                offers.push(getOffer());
                console.log('whatever');
                console.log(offers[0].price);
                append_offer(offers.peek);
            }
            return false;
    });
    return false;
});

Я полагаю, что какой-то HTML не повредит...

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Make Dem Trades Boi</title>
</head>
<body>


    <script src="/jquery.min.js"></script>
<script src="/class.js"></script>



    <table id="table">
        <tr>
            <th>name</th>
            <th>bids</th>
            <th>offers</th>
        </tr>
    </table>

    <select id="ddown">
    <option selected="selected" value="bid">Bid</option>
    <option value="offer">Offer</option>
  </select>

    <form id="form">
        Quantity:<input id="quantity" type="number"><br>
        Price:<input id="price" type="number"><br>
        Name:<input id="name" type="string">
        <input id="submit" type="submit" value="Buy">
    </form>


</body>
</html>
  • 1
    Какая строка вызывает ошибку?
  • 0
    Я думаю, что вам нужно сделать parse чтобы изменить type в вашем коде

2 ответа

4

В getOffer() здесь:

return new Offer(x, y, n);

x - элемент (и, следовательно, y и n). Если вы хотите, чтобы значение x как Number, вы можете использовать +x.value (или Number(x.value), если хотите быть явным).

  • 1
    Что, конечно, функция подпись quantity: number, price: number, client: string отклоняет.
  • 0
    Ну, я изменил это на следующее: return new Bid (x.value, y.value, n.value); и все равно не сработает
Показать ещё 4 комментария
0

Конструктор в Bid принимает число, другое число и строку:

constructor (quantity: number, price: number, client: string)

Вы передаете HTMLElement каждому из них. Чтобы удовлетворить типы Bid Constrcutor, вам необходимо получить данные из каждого элемента и проанализировать его, что достаточно легко сделать...

var x = +(<HTMLInputElement>document.getElementById("quantity")).value;
var y = +(<HTMLInputElement>document.getElementById("price")).value;
var n = (<HTMLInputElement>document.getElementById("name")).value;

return new Bid(x, y, n);

Чтобы разорвать этот ответ вниз, вы должны сообщить компилятору, что HTMLElement является фактически HTMLInputElement и использовать + оператору бездельник разобрать два номера.

Если вам не нравится операция стенографии +, вы можете использовать:

var x = parseInt((<HTMLInputElement>document.getElementById("quantity")).value, 10);
var y = parseInt((<HTMLInputElement>document.getElementById("price")).value, 10);
var n = (<HTMLInputElement>document.getElementById("name")).value;

return new Bid(x, y, n);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню