我有一个函数,它接受字符串或字符串数组并返回一个带有这些字符串键的对象。
这里是虚拟函数:
type myType<T extends string> = { [K in T]: string }
const myFunc = <T extends string>(param: T | T[]): myType<T> => {
let result = <myType<T>>{}
// some codes here...
return result;
}
通过上面的代码,我已经做到了:
let val = myFunc(['foo', 'bar']);
val.foo // valid
val.other // invalid
但是如果我将变量传递给函数,则所有字符串键都有效:
let variable = ['foo', 'bar'];
let val = myFunc(variable);
val.foo // valid
val.other // valid
是否有解决方法,以便我可以传递一个变量,但仍按预期工作?
答案 0 :(得分:0)
当您创建变量 let variable = ['foo', 'bar']
时,variable
的类型变为 string[]
,您将丢失数组中特定字符串的知识。您需要使用 as const
以便 Typescript 将 variable
解释为字符串文字 'foo'
和 'bar'
的固定元组。由于此固定元组是 readonly
,因此您还需要修改您的函数以接受 readonly
数组。
const myFunc = <T extends string>(param: T | readonly T[]): myType<T> => {
let variable = ['foo', 'bar'] as const;
let val2 = myFunc(variable);
val2.foo // valid
val2.other // invalid