我有这个代码:
size?: 'standart' | 'large';
然后我做了常数,比如:
export const INPUT_SIZE_LARGE: string = 'large';
export const INPUT_SIZE_STANDART: string = 'standart';
但这不起作用:
size?: INPUT_SIZE_LARGE | INPUT_SIZE_STANDART;
为什么?我该怎么处理?
首先需要删除类型string
,因为它强制TypeScript将类型从'large'
扩展到string
。其次,您需要使用typeof
关键字。JavaScript和TypeScript有不同的关键字typeof
。在Typescript中,它从值中提取类型。
这是工作代码:
export const INPUT_SIZE_LARGE = 'large';
export const INPUT_SIZE_STANDART = 'standart';
type A = {
size?: typeof INPUT_SIZE_LARGE | typeof INPUT_SIZE_STANDART;
}
以下是TS操场的工作代码:https://www.typescriptlang.org/play?ssl=6&ssc=2&pln=1&pc=1#代码/KYDWg9gTgLgBAYwgOwM7wJIDkAKBVAFQH0BlDALFEiAZAQQCUBxSuAXjgHIAbAQygDmwTgG4AUKEixEKdHGz5iZKqQJ0sAEUYF2XdL2QATfjFFixMAJ5hgcOroDeYuHFQBLAF7AA-AC44VjYQAGbyuISkFNT0zKwAPgHWCFhipEqJGqa2uIAvkA
如果我理解正确,那么您正在为类型赋值。这是不合适的。
export const INPUT_SIZE_LARGE = 'large';
export const INPUT_SIZE_STANDART = 'standart';
type size = typeof INPUT_SIZE_LARGE | typeof INPUT_SIZE_STANDART;
但这会起作用的
错误消息解释了错误:
'INPUT_SIZE_LARGE'指的是一个值,但在此处用作类型。你的意思是"INPUT_SIZE_ARGE类型"吗?(2749(
除此之外,您将显式地将常量键入为string
,但如果您希望它们是可以用于size
的字符串文字类型,则需要让它们是字符串文字类型而不是string
s。
所以去掉:string
加上typeof
就解决了这个问题:
export const INPUT_SIZE_LARGE = 'large';
export const INPUT_SIZE_STANDART = 'standart';
interface X {
size?: typeof INPUT_SIZE_LARGE | typeof INPUT_SIZE_STANDART;
}
游乐场链接
我以为你可能也需要as const
,但你没有。