我目前有一个保存颜色值的常量列表:
const gray = "#555"
const grayLight = "#777"
const primary1 = "#fff"
const primary2 = "#000"
我还有一个函数,该函数接收要为其创建接口的对象形式的参数。参数之一应该是这些颜色的子集。
以下是使用联合类型的外观示例。
interface props {
argument1: string
colorChoices: '#555' | '#777'
}
function myFunction(props: props): void {
//...
}
我知道枚举和联合类型不接受按设计计算的(字符串)值。因此以下操作无效:
const gray = "#555"
const grayLight = "#777"
enum colors {
gray = gray,
grayLight = grayLight,
}
type grays = gray | grayLight
我可以举一个下面的例子,它可以使它安全并且可以正常工作,但是恒定重复似乎不是一个明智的模式。
type gray = '#555'
const gray: gray = '#555'
type grayLight = '#777'
const grayLight: grayLight = '#777'
type grayScale = gray | grayLight
interface props {
argument1: string
colorChoices: grayScale
}
function myFunction(props: props): void {
//...
}
有没有一种方法可以做到这一点而又不重复我的常数值并将这些值仅放在一个位置?
答案 0 :(得分:3)
您可以在常量上使用with
x as (
SELECT DISTINCT
PI.INDEX_VALUE,
LB.STATE,
UNIQUE_ID,
'AL',
'EN',
MBP.START_DATE,
ADD_MONTHS(MBP.START_DATE,12) as m1,
CASE WHEN MBP.CLOSURE_ID = 40 THEN MBP.END_DATE - 120
WHEN MBP.CLOSURE_ID IN (5,18,103) THEN MBP.END_DATE - 365
ELSE MBP.END_DATE - 270 END AS END_DATE1
FROM dwteam.PATIENT_DETAILS PD
JOIN dwteam.ADMIN_CLIENT AC ON AC.CLIENT_ID = PD.CLIENT_ID
AND AC.DELETED_BY is null
JOIN dwteam.MEM_BENF_PROG MBP ON MBP.MEMBER_ID = PD.PATIENT_ID
AND MBP.DELETED_BY is null
JOIN dwteam.BENF_PLAN_PROG BPP ON BPP.BEN_PLAN_PROG_ID
= MBP.BEN_PLAN_PROG_ID
JOIN dwteam.BENEFIT_PROGRAM BPR ON BPR.BENEFIT_PROGRAM_ID
= BPP.BENEFIT_PROGRAM_ID
AND BPR.DELETED_BY is null
left JOIN dwteam.PATIENT_INDEX PI ON PI.PATIENT_ID=MBP.MEMBER_ID
AND PI.INDEX_ID in (10073,10071)
left join UHG_000613129.HFS_LOB_ID_XWALK LB
on trim(upper(replace(replace(AC.CLIENT_NAME,'C&S',''),'M&R','')))
= trim(upper(STATE_DESC))
WHERE PROGRAM_NAME IN ('Healthy Pregnancy','High Risk Pregnancy')
AND (sysdate < ADD_MONTHS(MBP.START_DATE,12)
OR sysdate < ADD_MONTHS(MBP.END_DATE,12))
)
SELECT *
FROM x
WHERE end_date1 > ... -- filtering predicate(s) using a named expression
来获取常量的实际类型,因此无需为每个常量定义类型:
typeof