[英]How to describe type like this in TypeScript?
As below, personParam
is always number | { name: string; }
如下,
personParam
总是number | { name: string; }
number | { name: string; }
number | { name: string; }
in func
, but I hope it's type can be determined by key number | { name: string; }
在func
,但我希望它的类型可以通过按键来决定
type Params = {
jack: number;
tom: {name: string};
};
const func = <K extends keyof Params>(key: K, personParam: Params[K]) => {
switch (key) {
case 'jack':
console.log(personParam);
case 'tom':
// I hope personParams to be {name: string} type, but unfortunately it's number | { name: string; }
// TS2339: Property 'name' does not exist on type 'number | { name: string; }'. Property 'name' does not exist on type 'number'.
console.log(personParam.name);
}
};
One solution is using a type predicates一种解决方案是使用类型谓词
type Params = {
jack: number;
tom: {name: string};
};
const func = <K extends keyof Params>(key: K, personParam: Params[K]) => {
if(isTom(key, personParam)) {
console.log(personParam.name);
} else {
console.log(personParam);
}
};
function isTom(k: keyof Params, personParam: Params[keyof Params]): personParam is {name: string} {
return k === 'tom';
}
I don't know if this way can be useful for you.不知道这个方法对你有没有用。 But check this out.
但是看看这个。
type Params = {
jack: number;
tom: {name: string};
};
const func = <K extends keyof Params>(personParam: Params[K]) => {
if(typeof(personParam) === 'object') {
personParam.name;
} else {
console.log(personParam);
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.