interface Row<T, K extends keyof T> {
field: K;
showValue?: (value: T[K]) => string;
}
interface Data {
name?: string;
age?: number;
}
type AData<T> = {
[K in keyof T]: Row<T, K>;
}[keyof T]
const A: AData<Data>[] = [
{
field: "age",
// Здесь value должен иметь тип number
showValue: (value) => value.toString(),
},
{
field: "name",
// Здесь value должен иметь тип string
showValue: (value) => value.toString(),
},
];
interface AnimalProps {
name: string;
}
interface PersonProps {
age: number;
}
type ComponentProps =
| ({ type: 'animal'; } & AnimalProps)
| ({ type: 'person'; } & PersonProps)
// or
interface AnimalType extends AnimalProps {
type: 'animal';
}
interface PersonType extends PersonProps {
type: 'person';
}
type ComponentProps2 = AnimalType | PersonType;
Что я упустил?
(error: Error, data: null, info: string) => any
null
вместо Error
.function getProductCollection(func: (error: null | Error, data: ProductUnit[] | null, info: string) => any): void;
function getProductCollection(func: (error: Error, data: null, info: string) => any): void { }
type IProps = {
data: (({ icon: any; } | { text: string; }) & { id: string | number })[];
};
type IProps = {
data: Data[];
};
type Data = Data.WithIcon | Data.WithText;
namespace Data {
interface Base {
id: string | number;
}
export interface WithIcon extends Base {
icon: any;
}
export interface WithText extends Base {
text: string;
}
}
declare global {
interface Function<T> {
delay(ms: number): Function<T>;
}
}
const { data: { localId, idToken, expiresIn } } = await axios.post(
`https://identitytoolkit.googleapis.com/v1/accounts:${isLogin ? 'signInWithPassword' : 'signUp'}?key=${API_KEY}`,
payload
)
[key as string]
- это ошибка, должно быть просто [key]
.а
на string
, то ошибка сразу же появится. 1. когда уместно использовать данный язык?
2. Можно ли использовать TS без фреймов и библиотек?
3. И есть ли смысл его использовать без фреймворков?
interface SomeType {}
class SomeClass {
static getSymbols(): SomeType;
static getSymbols(getSymbolsOnly: true): string[];
static getSymbols(getSymbolsOnly: false): SomeType;
static getSymbols(getSymbolsOnly: boolean = false): string[] | SomeType {
if(getSymbolsOnly) {
return [];
}
return {};
}
}
const t1 = SomeClass.getSymbols(); // SomeType
const t2 = SomeClass.getSymbols(true); // string[]
const t3 = SomeClass.getSymbols(false); // SomeType
const asSomeInterface = <K extends PropertyKey>(obj: { [P in K]: P extends `@${string}` ? string : never }) => obj;
asSomeInterface({
'@asd': 'asd',
'asd': 'asd', // error
});