Javascript .value和textContent有问题
这是我的日常训练,我几乎了解JS网站的一切。但今天我遇到了一个问题,这很奇怪,因为我一直在处理这些问题,但Idk为什么它总是给我错误。当鼠标悬停在Javascript .value和textContent有问题,javascript,html,Javascript,Html,这是我的日常训练,我几乎了解JS网站的一切。但今天我遇到了一个问题,这很奇怪,因为我一直在处理这些问题,但Idk为什么它总是给我错误。当鼠标悬停在basketTotal.textContent=total上时,错误p是类型“number”不能分配给类型“string”,并且也有问题。value也是这个错误的原因属性“value”在类型“Element”上不存在。我以前从未见过这样的东西。尝试创建一个购物篮,只是为了训练。 谢谢 表单验证 身体{ 保证金:0; } * { 字体系列:Arial、
basketTotal.textContent=total
上时,错误p是类型“number”不能分配给类型“string”
,并且也有问题。value
也是这个错误的原因属性“value”在类型“Element”上不存在。
我以前从未见过这样的东西。尝试创建一个购物篮,只是为了训练。
谢谢
表单验证
身体{
保证金:0;
}
* {
字体系列:Arial、Helvetica、无衬线字体;
}
输入{
大纲:无;
}
.集装箱{
显示器:flex;
宽度:100vw;
高度:100vh;
}
.首先{
宽度:50%;
保证金:1雷姆0 0 1雷姆;
}
.第二{
保证金:2Rem0;
宽度:500px;
高度:250px;
边框:#E62px实心;
边界半径:.75rem;
}
你的篮子:
哈利波特系列丛书(新版)5$
数量:
清洁代码手册(新设计)3$
数量:
交付方式:
产后
飞机交付
卡车运输
自行车递送
哈利波特系列丛书(新版):
清洁代码手册(新设计):
交付方式:
提交
你的总篮数:
//@ts支票
常数篮=()=>{
设hBook=document.querySelector('.hBook').value;
让cBook=document.querySelector('.cBook').value;
hBook=parseInt(hBook);
cBook=parseInt(cBook);
设hBook_total=hBook*5;
设cBook_total=cBook*3;
合计=hBook\u合计+cBook\u合计;
const calculate=document.querySelector('#calculate');
const basketTotal=document.querySelector('.total');
calculate.addEventListener('单击',()=>{
basketTotal.textContent=总计
})
}
您正在使用TypeScript。您的total
是一个数字,但元素的.textContent
只能是一个字符串。为了让TypeScript理解您所做的不是错误,您需要在分配数字时将其显式转换为字符串
const total = String(hBook_total + cBook_total);
另一个问题是TypeScript只知道document.querySelector('.hBook')
返回一个元素,而不是HTMLInputElement。在TypeScript语法中,向编译器指示所选内容的正确方法是使用泛型:将HTMLInputElement
作为类型参数传递给querySelector
let hBook = document.querySelector<HTMLInputElement>('.hBook').value;
let cBook = document.querySelector<HTMLInputElement>('.cBook').value;
let hBook=document.querySelector('.hBook').value;
让cBook=document.querySelector('.cBook').value;
但是为了使用它,您需要在一个TypeScript文件中进行编写——它在JavaScript语法中不起作用
如果您想使用TypeScript的类型检查,标准的专业做法是将JS移动到一个独立的.ts
文件中(允许您使用TypeScript语法,例如泛型参数),并让TypeScript分析.ts
文件并将其转换为JavaScript。这是我极力推荐的方法。在
标记中使用内联JavaScript非常奇怪,TypeScript会对其进行类型正确性分析
另一个(更糟糕的)选项是删除JavaScript中的
/@ts检查,以删除类型脚本类型检查。脚本标记可以将代码作为文本或src包含在内,但不能同时包含两者。“basket()在哪里被调用?注意:您只希望在单击事件发生时获取并处理相关值。请参见idk如何使用TypeScript。我还没学会。你已经在使用打字脚本了。您收到的警告是TypeScript错误。要么学习如何使用TypeScript(我强烈建议,这会使编写脚本更容易),要么禁用它。有人告诉我这个@//ts check
,我认为它很有用,但我不知道它与TypeScript有关。无论如何,我计划学习TS,但仍然无法解决.value
的问题。它的用处微乎其微-最好是在.TS
TypeScript文件中正确使用TypeScript,或者(如果你根本不知道TypeScript)禁用TypeScript类型检查。就像我说的,对于.value
,在检索值时使用TypeScript和泛型参数:document.querySelector('.hBook').value
或通过深入查看@//ts检查
完全删除类型脚本类型检查。