首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从keyof类型类型指定类型

从keyof类型类型指定类型
EN

Stack Overflow用户
提问于 2017-11-13 23:31:22
回答 1查看 90关注 0票数 0

我有个功能

代码语言:javascript
复制
newText<T, U extends keyof T>(name: keyof T, value: T[U]){...}

如果我用T调用它,它看起来像{ one: Function, two: string },类型应该看起来像'one' | 'two',值应该是Function | string

这与我想要的非常接近,但是当我指定一个名称时,我希望值是该键的类型。因此,如果我做了newText('one',,我希望看到Function作为我唯一的值选项,并且执行newText('two', () =>{})应该会抛出一个错误。

这在打字本2.6中有可能吗?

完全用例与解决方案

代码语言:javascript
复制
type params = {
  util?: Function;
  utilName?: string;
  other?: string;
};

type utilParams = 'util' | 'utilName';

class field {
  name: string;
  required: boolean;
  value: any;
  params: params;
  constructor(name: string, required: boolean, value: any, params: params) {
    this.name = name;
    this.required = required;
    this.value = value;
    this.params = params;
  }
}

type coreOptional<T, U extends keyof T> = {
  required?: boolean;
  value?: T[U];
};

class test<T> {
  test<U extends keyof T>(name: keyof T, optional: coreOptional<T, U> & Partial<Pick<params, utilParams>>) {
    let onlyParams: Partial<Pick<params, utilParams>> = { ...optional };
    return new field(name, optional.required || false, optional.value, onlyParams);
  }
}

let myTest = new test<{ one: Function; two: Function }>();

myTest.test('one', { value: '' }); //works!
myTest.test('one', { value: false}); //errors like it should.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-13 23:38:40

因此,如果我执行newText('one‘),我希望将函数作为唯一的值选项,并且执行newText(’2‘,() =>{})应该会抛出一个错误。

简单:

代码语言:javascript
复制
type T = { one: Function, two: string };
declare function newText<KEY extends keyof T>(name: KEY, value: T[KEY]): any;

newText('one', () => null); // Okay
newText('two', () => null); // Error 

干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47275260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档