TypeScript中的条件参数类型
这里有一个函数,其中第一个参数类型取决于第二个参数是true还是false 所以,如果userExists为true,则数据应该是字符串,否则是数字。但我一直看到错误 有人能帮我找出哪里出了问题吗TypeScript中的条件参数类型,typescript,generics,types,conditional-statements,Typescript,Generics,Types,Conditional Statements,这里有一个函数,其中第一个参数类型取决于第二个参数是true还是false 所以,如果userExists为true,则数据应该是字符串,否则是数字。但我一直看到错误 有人能帮我找出哪里出了问题吗 type DataType<T> = T extends boolean ? string : number const makeUsername = async <T extends boolean>({ data, userExists, }: { data:
type DataType<T> = T extends boolean ? string : number
const makeUsername = async <T extends boolean>({
data,
userExists,
}: {
data: DataType<T>,
userExists: T
}) => {
if (userExists) {
// data type should be string
} else {
// data type should be number
}
}
type DataType=T扩展布尔值?字符串:数字
const makeUsername=async({
数据,
用户存在,
}: {
数据:数据类型,
userExists:T
}) => {
如果(用户存在){
//数据类型应为字符串
}否则{
//数据类型应为数字
}
}
看起来,您正试图构建以下内容:
type StringOrNumber<T extends boolean> = T extends true ? string : number
但函数重载在这里可能更合适:
function makeUsername({ data, userExists }: { data: string; userExists: true }): any;
function makeUsername({ data, userExists }: { data: number; userExists: false }): any;
function makeUsername({ data, userExists }: { data: string | number; userExists: boolean }): any {
if (userExists) {
// Here you have to cast types anyway...
const dataStr = data as string;
} else {
const dataNum = data as number;
}
}
// But on call side, this will also works as expected.
makeUsername({ data: 'kyo', userExists: true }) // ok
makeUsername({ data: 'kyo', userExists: false }); // error
function makeUsername({ data, userExists }: { data: string; userExists: true }): any;
function makeUsername({ data, userExists }: { data: number; userExists: false }): any;
function makeUsername({ data, userExists }: { data: string | number; userExists: boolean }): any {
if (userExists) {
// Here you have to cast types anyway...
const dataStr = data as string;
} else {
const dataNum = data as number;
}
}
// But on call side, this will also works as expected.
makeUsername({ data: 'kyo', userExists: true }) // ok
makeUsername({ data: 'kyo', userExists: false }); // error