打字稿:类型'string'不能分配给类型'"numeric"Date::toLocaleDateString()中的"2-digit"'

我最近在以下代码段中收到 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 内打开课程时,它显示以下错误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 的错误吗?一旦编译,代码似乎运行良好(并且一直运行良好) - 根据Date::toLocaleDateString()的文档,我在这里所做的似乎完全有效。

有任何想法吗?

回答

当您使用诸如 之类的文字初始化类属性时public foo = { bar: 'a' },它的类型将变为{ bar: string },即使您将其声明为readonly. TypeScript 故意不会使类型过于严格 ( { bar: 'a' })。

方法toLocaleDateString接受一个对象,其键year必须是'numeric'or类型'2-digit',但你的对象是类型string

要使初始化对象的类型更具体,请使用as const

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


以上是打字稿:类型'string'不能分配给类型'"numeric"Date::toLocaleDateString()中的"2-digit"'的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>