相关疑难解决方法(0)

typescript接口需要存在两个属性之一

我正在尝试创建一个可以拥有的界面

export interface MenuItem {
  title: string;
  component?: any;
  click?: any;
  icon: string;
}
Run Code Online (Sandbox Code Playgroud)
  1. 有没有办法要求componentclick设置
  2. 有没有办法要求两个属性都不能设置?

typescript

48
推荐指数
8
解决办法
2万
查看次数

为什么 A | B 允许两者结合,我该如何预防?

我很惊讶地发现 TypeScript 不会抱怨我做这样的事情:

type sth = { value: number, data: string } | { value: number, note: string };
const a: sth = { value: 7, data: 'test' };
const b: sth = { value: 7, note: 'hello' };
const c: sth = { value: 7, data: 'test', note: 'hello' };
Run Code Online (Sandbox Code Playgroud)

我想也许value被选为类型联合判别式或其他东西,因为我唯一能想出解释这一点的是,TypeScript 是否以某种方式number在这里理解1 | 2为例如的超集。

所以我改变valuevalue2在第二对象上:

type sth = { value: number, data: string } | { value2: number, note: …
Run Code Online (Sandbox Code Playgroud)

xor typescript typescript-types

16
推荐指数
2
解决办法
1431
查看次数

Typescript是否支持互斥类型?

我有一个带参数的方法.我希望Typescript验证传入的对象(在typescript编译时,我理解运行时是一个不同的动物)只满足一个允许的接口.

例:

interface Person {ethnicity: string;}
interface Pet {breed: string;}
function getOrigin(value: Person ^ Pet){...}

getOrigin({}); //Error
getOrigin({ethnicity: 'abc'}); //OK
getOrigin({breed: 'def'}); //OK
getOrigin({ethnicity: 'abc', breed: 'def'});//Error
Run Code Online (Sandbox Code Playgroud)

我意识到这Person ^ Pet不是有效的Typescript,但这是我认为首先尝试并且看似合理的东西.

typescript

13
推荐指数
2
解决办法
2331
查看次数

使用 Typescript 的 React 组件的一种或另一种 prop 类型

我正在尝试创建一个通过dataprop 渲染的表格,或者您可以直接通过children. 为此,我需要一种接受 或 的data类型children

我已经找到了这些解决方案,但它在某种程度上不适用于 React Component。仅适用于普通物体。

所以基本上我创建了三个接口,一个具有基本类型,一个具有data,一个具有children. 但是当我创建 React 组件时,它对我大喊这些道具不存在TableProps

有谁知道我做错了什么?这是沙箱:https://codesandbox.io/s/admiring-shadow-vw148? file=/src/table.tsx

谢谢!

types typescript reactjs

7
推荐指数
1
解决办法
1017
查看次数

为什么 Typescript 允许将 `{a: 1, b: 2}` 分配给类型 `{a: any} | {b:任何}`?

考虑这个代码:

let foo: {a: any} | {b: any} = {a: 1, b: 2};
Run Code Online (Sandbox Code Playgroud)

我希望 TypeScript 拒绝此代码,因为此联合类型意味着第一种类型或第二种类型,并且该值不可分配给它们中的任何一种,因此类型检查应拒绝它。但事实上它过去了,为什么呢?

(对于背景,上述类型旨在成为“此属性或该属性,但不是两者都类型”。请参阅Typescript 接口 - 是否需要“一个或另一个”属性?

typescript

6
推荐指数
1
解决办法
400
查看次数

Typescript接口条件可选参数

我们可以做到这一点:

interface IMyInterface{
    firstname:string  // this means firstname is mandatory

    name:string  // this also means name is mandatory
}
Run Code Online (Sandbox Code Playgroud)

我该怎么说,firstname还是name可选(?),取决于是否提供了另一个?

或者,如果那不可能,还有哪些其他选择?

编辑:这不是Typescript接口的重复-可能需要“一个或另一个”属性吗?

我们不想为每个可选元素创建一个单独的接口,仅仅是因为维护,命名和重构会很麻烦,并且不可重用。

typescript

5
推荐指数
2
解决办法
2373
查看次数

基于条件类型的可选参数

是否可以基于TypeScript中的条件类型使函数具有强制性参数或可选参数?

到目前为止,这是我得到的:

const foo = <T extends string | number>(
    first: T,
    second: T extends string ? boolean : undefined
) => undefined;

foo('foo', true); // ok, as intended
foo(2, true); // not ok, as intended
foo(2, undefined); // ok, as intended
foo(2); // compiler error! I want this to be ok
Run Code Online (Sandbox Code Playgroud)

types typescript conditional-types

4
推荐指数
1
解决办法
780
查看次数