Weekday2s.mon === 0
. Если нужны в enum именно строки - то именно строки и следует задавать: enum Weekdays { mon = "mon", ...}
Ну кроме того что enum скомпилируется в JS - объект, а type будет доступен только во времени компиляции.
tsc --watch
, но адекватный вариант - юзать системы с live reload'ом, например одну из предложенных Алексей Ярков.$refs
у него лежат голые компоненты Vue или Element'ы. @Component
export default class Login extends Vue {
// ...
}
export default interface Login {
$refs: {
loginForm: any; // на самом деле не any, а интерфейс компонента, поддерживающий нужные методы
}
}
"import-blacklist": [true, ["^src/.*"]]
"no-restricted-imports": ["error", {"patterns": ["src/*"]}]
this.showParams.apply(this, ...args);
содержит две ошибки:this.showParams
внутри this.showParams
ты поучаешь бесконечную рекурсию, надо сохранить старый this.showParams
в отдельную переменную и вызывать через неё;Function.prototype.apply
принимает вторым аргументом массив, а ты его тут зазря разбираешь.class ExampleClass {
showParams(...args) {
console.log('I have to be calleb');
console.log(...args);
}
}
const exampleInstance = new ExampleClass();
exampleInstance.showParams('one', 'Two', 'Three', 456);
exampleInstance.showParams = (showParamsOld => function(...args){
args.push('Default Argument');
return showParamsOld.apply(this, args);
})(exampleInstance.showParams);
exampleInstance.showParams('one', 'Two', 'Three', 456);
Если ответ "да", то поправь сам.getStyles<T extends keyof CSSStyleDeclaration>(styles: readonly T[]) {
return styles.reduce((res, style) => {
res[style] = this.$nativeElement.style[style];
return res;
}, {} as Pick<CSSStyleDeclaration, T>);
}
CSSStyleDeclaration
. const foo = {
bar: 1
};
foo['bar'] // 1
const baz = {
qux: 2
}['qux']; // 2
тайпскрит в работе с типами тут ничем не отличается: type user = {
id: number,
name: string,
};
type id = user['id']; // number
type userKeys = keyof user; // 'id' | 'name'
type userTypes = user[keyof user]; // number | string
тип never
же просто не учитывается: number | string | never
- то же самое что number | string
. foo as unknown as Type
- двойным кастованием вы можете скастовать что угодно во что угодно. T extends [], K extends keyof T
- K
тут что-то производное от number
, потому что ключи(keyof) массива([]) - только цифры.let resultSort: T = arr;
- бессмысленно, так как arr.sort
в любом случае меняет исходный массив.a[propertyName].toLowerCase()
- упадёт если propertyName
будет year
, т.к. Number не имеет метода toLowerCase
.function sortArray<T extends {[key: string]: unknown}, K extends keyof T> (originArr: T[], propertyName: K, cb: (a: T[]) => T[]): T[] {
let arr: T[] = JSON.parse(JSON.stringify(originArr)); //deep copy array
arr.sort((a, b) => {
let nameA = String(a[propertyName]).toLowerCase(),
nameB = String(b[propertyName]).toLowerCase();
if (nameA < nameB)
return -1;
if (nameA > nameB)
return 1;
return 0;
});
return cb(arr);
}
String
, но тогда вместо unknown
надо указать конкретные типы с которыми предполагается работать, и в самой функции сортировки их учесть. tsc -d --outDir ./dist
и package.json, смотрящий на результат.