演示代码:https://tsplay.dev/N5jo0m
interface Base { name: string; age: number;};interface FixedInstance extends Base {}interface FollowInstance extends Base {}type NameType = "fixed"|"follow";type FixedName = "fixed";type FollowName = "follow";const data: NameType = 'fixed';type myType = typeof data;type isFixed = myType extends FixedName ? true : false; // truetype isFollow = myType extends FollowName ? true : false; // false// -----------cut---function sellect<T extends NameType, U = T extends FixedName ? FixedInstance : FollowInstance>(name: T, data: U) { return { name, data };}const { name: myName, data: myData } = sellect("fixed", { name: "levi", age: 18 } as FollowInstance);type dataType = typeof myData;type dataisFixed = myType extends FixedName ? true : false; // truetype dataisFollow = myType extends FollowName ? true : false; // false
从cut
以上,可以看到都是正确的,问题在函数sellect
name: T
去判断第二个参数data
的类型name
是fixed
就限制data
是FixedInstance
,否则就限制为FollowInstance
问题1:我在sellect
参数传参的时候故意 as FollowInstance
,在TS中并没有报错
问题2:在拿到的结果中dataisFixed
是true
,但是我传过去的是FollowInstance
修改如下
interface Base { name: string; age: number;};interface FixedInstance extends Base {}interface FollowInstance extends FixedInstance { sex: 1|2;}type NameType = "fixed"|"follow";type FixedName = "fixed";type FollowName = "follow";const data: NameType = 'fixed';type myType = typeof data;type isFixed = myType extends FixedName ? true : false; // truetype isFollow = myType extends FollowName ? true : false; // false// -----------cut---function sellect<T extends NameType>(name: T, data: T extends FixedName ? FixedInstance : FollowInstance) { return { name, data } as const;}const infodata: FixedInstance = { name: "levi", age: 18 };const { name: myName, data: myData } = sellect("follow", infodata);type dataType = typeof myData;type dataisFixed = myType extends FixedName ? true : false; // falsetype dataisFollow = myType extends FollowName ? true : false; // false
今天面试遇到一道题,想了很久也没有想出来 我是这样写的,但是报错了 f()的参数有问题,想请教一下大家应该如何写?
泛型的类型约束 swapTwoValues(_:_:)函数和Stack类型可以用于任意类型. 但是, 有时在用于泛型函数的类型和泛型类型上, 强制其遵循特定的类型约束很有用. 类型约束指出一个类型形式参数必须继承自特定类, 或者遵循一个特定的协议、组合协议. 例如, Swift的Dictionary类型在可以用于字典中键的类型上设置了一个限制. 如字典中描述的一样,字典键的类型必须是可哈希的. 也
我在typescript中有以下泛型类 但是我不知道为什么得到这个错误Class'(匿名类)'不正确地扩展基类'列'。属性getValue的类型不兼容。类型'(值:数字)=
在过去一周左右的时间里,我一直在为Scala开发一个类型化、索引化的数组特性。我希望将该特征作为类型类提供,并允许库用户以他们喜欢的方式实现它。下面是一个示例,使用列表的列表来实现2D数组类型类: 这一切看起来都很好。我遇到的困难是,我希望将索引类型约束为一个已批准类型的列表(用户可以更改)。由于程序不是所有已批准类型的原始所有者,所以我想用一个typeclass来表示这些已批准类型,并让已批准类
本文向大家介绍TypeScript 类型参数作为约束,包括了TypeScript 类型参数作为约束的使用技巧和注意事项,需要的朋友参考一下 示例 使用TypeScript 1.8,类型参数约束可以从同一类型参数列表中引用类型参数。以前这是一个错误。
请问下面的 model 参数的类型该如何定义呢? 我试了半天,好像没有办法