Как предоставить подсказку типа для параметра метода - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать литерал объекта для передачи в качестве аргумента методу и хочу убедиться, что он соответствует определенному интерфейсу. Как я могу сделать это без предварительного создания временной переменной этого типа?

interface IPoint {
    x: number;
    y: number;
}

// A function I'm given that I can't change
function doSomething(obj: any) { }

function tryToUseDoSomethingSafely() {
    // I'm making sure that the call to doSomething takes a proper IPoint.
    // This does what I want. I'll get a compile error if I forget the x
    // or y components.
    let point: IPoint = { x: 1, y: 2 };
    doSomething(point);

    // How can I do the above WITHOUT creating the temporarily variable?
    // I want something like this where I'd get a compile error message if
    // the parameter is not a proper point; this won't compile.
    doSomething({ x: 1, y: 2 } : IPoint);
}

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Не думаю, что здесь есть хорошее решение. Лучшее, что я придумал, - это построение собственной функции exact<T>(T item) { return item; } и использование ее в любом месте, где я хочу, чтобы литерал объекта гарантированного типа Связанная проблема на сайте разработки TypeScript: https://github.com/Microsoft/TypeScript/issues/7481#issuecomment-386061556

0 голосов
/ 30 апреля 2018

с типом any для параметра вы можете передать все, что вы хотите, но в вашем методе, если вы хотите, чтобы свойство x или y вашего заданного параметра имело его, или вы можете проверить, если x или y существует для использования или нет, и если ваша точка иногда может быть без x или y, вы можете определить свой интерфейс следующим образом:

interface IPoint {
    x?: number;
    y?: number;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...