![](/img/trans.png)
[英]Argument of type 'string | undefined' is not assignable to parameter of type 'string' - TypeScript error
[英]Argument of type 'string | number | string[] | undefined' is not assignable to parameter of type 'string' when converting JavaScript to TypeScript
我正在尝试将以下 JavaScript function 转换为 TypeScript 并且我收到以下错误
$("#checkoutSubmit").click(function () { var departureDate = $("#bookingDepartureDateInput").val(); localStorage.setItem("datevalue", departureDate); console.log(localStorage.getItem("datevalue")) });
我从来没有使用过 TypeScript 并且我似乎在努力转换它。 我可以了解如何在 TypeScript 中重写此代码吗? 谢谢你。
JQuery val();
方法可以返回String
、 Number
或Array<string>
这会导致错误,因为localStorage.setItem
只接受字符串。
如果您确定$("#bookingDepartureDateInput").val();
总是返回一个字符串,你可以用它as string
告诉 typescript 它可以假设它是一个字符串:
$("#checkoutSubmit").click(function () {
const departureDate = $("#bookingDepartureDateInput").val() as string;
localStorage.setItem("datevalue", departureDate);
console.log(localStorage.getItem("datevalue"))
});
JQuery .val()
文档。
jQuery val
方法返回string
、 string[]
、 number
或undefined
。 但是您尝试将它与存储接口的setItem
方法一起使用,该方法只接受字符串。 所以你得到一个错误,因为这可能是一个错误。
如果您知道来自val
的值将是一个字符串,而您可以在其上执行as string
,那么问题在于您假设您没有检查:没有任何东西会提出该声明(一种类型断言)不真实。 相反,您可以使用类型断言 function 来保证 TypeScript并确保条件正确:
function assertIsString(value: any): asserts value is string {
if (typeof value !== "string") {
throw new Error(`String expected, got non-string instead`);
}
}
代码将是:
$("#checkoutSubmit").click(function () {
const departureDate = $("#bookingDepartureDateInput").val();
assertIsString(departureDate);
localStorage.setItem("datevalue", departureDate);
console.log(localStorage.getItem("datevalue"))
});
这是有效的,因为在断言 function 调用之后, TypeScript 知道它有一个string
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.