我最近在以下代码段中收到 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/