export const computedType = (item: A|B, key: string | number) => {
return item[key]
};
我希望当传入的第一个参数类型为A时,第二个参数类型就只能为string,当传入的第一个参数类型为B时,第二个参数类型就只能为number,
此处的ts类型该怎么写呢?
export const computedType = (item: A|B, key: string | number) => {
return item[key]
};
我希望当传入的第一个参数类型为A时,第二个参数类型就只能为string,当传入的第一个参数类型为B时,第二个参数类型就只能为number,
此处的ts类型该怎么写呢?
既然参数不确定,那就用类型推断
export const computedType = <T extends A | B>(item: T, key: keyof T) => {
return item[key]
};
TS是没有判断的,但是你的需求是可以实现的。
我的例子:
将传递进来的参数改为对象
type TypeOne = {
item: A;
key: string;
}
type TypeTwo = {
item: B;
key: number;
}
type Value = TypeOne | TypeTwo;
export const computedType = (value: Value) => {
return value.item[value.key];
};。
https://stackoverflow.com/que...
interface A {
name: string;
}
interface B {
id: number;
}
type ComputedType = {
(item: A, key: string);
(item: B, key: number);
}
export const computedType: ComputedType = (item, key) => {
return item[key]
}
可以用函数重载
export function computedType(item: A, key: string): any;
export function computedType(item: B, key: number): any;
export function computedType(item: A | B, key: string | number): any {
return item[key];
};
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
1 回答3.1k 阅读✓ 已解决
是要这个效果吗?