javascript - typescript :类型 'string' 不可分配给类型 '"数字"| "2-digit"' 在 Date::toLocaleDateString()

标签 javascript typescript date

我最近在以下代码段中收到 Visual Studio Code 的“错误”警告:

someDateObject.toLocaleDateString('de-DE', Travel.dateOptions));
someDateObject.toLocaleDateString('de-DE', Travel.dateOptions));
Travel.dateOptions 的定义如下:
public static dateOptions = { year: 'numeric', month: '2-digit', day: '2-digit' };
在过去 2 年的大部分时间里,这一直运行良好,但最近在 VSC 中打开类(class)时,它显示 Travel.dateOptions 的以下错误:
Argument of type '{ year: string; month: string; day: string; }' is not assignable to parameter of 
type 'DateTimeFormatOptions'.
Types of property 'year' are incompatible.
Type 'string' is not assignable to type '"numeric" | "2-digit"'. ts(2345)
我对为什么感到困惑。这可能是VSC的错误吗?该代码在编译后似乎工作正常(并且一直工作正常) - 并且根据 documentation对于 Date::toLocaleDateString() 我在这里所做的似乎完全有效。
有任何想法吗?

最佳答案

当您使用诸如 public foo = { bar: 'a' } 之类的文字初始化类属性时,其类型变为 { bar: string } ,即使您将其声明为 readonly . TypeScript 故意不会使类型过于严格( { bar: 'a' } )。
方法toLocaleDateString接受其键 year 的对象必须是 'numeric' 类型或 '2-digit' , 但你的类型是 string .
要使初始化对象的类型更具体,请使用 as const :

public static dateOptions = { year: 'numeric', month: '2-digit', day: '2-digit' } as const;

关于javascript - typescript :类型 'string' 不可分配给类型 '"数字"| "2-digit"' 在 Date::toLocaleDateString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66590691/

相关文章:

javascript - d.ts 文件和 nodejs 需要具有相同名称的重复标识符错误

mysql - 统计首次通话后 6 天内重复通话的用户

python - 使用 Pandas 读取 CSV 日期返回日期时间而不是时间戳

javascript - 从样式组中选择 css 样式

javascript - 如何在不重新绘制的情况下更新 Highcharts 中的条形图

arrays - react 更新对象数组的单个对象 - 映射与整个数组

angular - 在 Angular 项目中放置类型/类的位置

php获取 future 日期时间

javascript - 使用 TypeScript 进行 Vuex 突变时,对象可能是 'undefined'

javascript - 是否可以创建类似于 typeof 工作方式的函数,例如使用空格而不是括号?